1. 题目描述
输入一个正整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个。例如输入数组{3,32,321},则打印出这三个数字能排成的最小数字为321323。
2. 题目描述
题目的意思:给你一个数组,要求你返回一个字符串,为这些数组中最小的数(字符串)我们需要对数组内的数字进行排序,这里进行的排序指的是对其在数组内的位置进行排序,这里我们需要一个规则,如果NM > MN,则N>M;这里的大于不是常规的大于关系,是我们自己定义的一个关系将数组依次存入ArrayList中,对于ArrayList进行排序,可以选择的排序方式有:冒泡排序、快速排序、重写排序方法最终利用StringBuilder的toString的方法,得到最终的结果
3. 题目代码
public class Test35 {
public static void main(String
[] args
) {
int[] nums
= new int[] { 3, 30, 34, 5, 9 };
System
.out
.println(PrintMinNumber(nums
));
}
public static String
PrintMinNumber(int[] numbers
) {
ArrayList
<String> list
= new ArrayList<>();
for (int i
= 0; i
< numbers
.length
; i
++) {
list
.add(String
.valueOf(numbers
[i
]));
}
kuaipai(list
, 0, list
.size() - 1);
System
.out
.println(list
);
StringBuilder stringBuilder
= new StringBuilder();
for (int i
= 0; i
< list
.size(); i
++) {
stringBuilder
.append(list
.get(i
));
}
return stringBuilder
.toString();
}
public static void kuaipai(ArrayList
<String> list
, int left
, int right
) {
if (left
>= right
) {
return;
}
int i
= left
;
int j
= right
;
String string
= list
.get(i
);
while (i
< j
) {
while (i
< j
&& (list
.get(j
) + string
).compareTo(string
+ list
.get(j
)) >= 0) {
j
--;
}
list
.set(i
, list
.get(j
));
while (i
< j
&& (list
.get(i
) + string
).compareTo(string
+ list
.get(i
)) <= 0) {
i
++;
}
list
.set(j
, list
.get(i
));
}
list
.set(i
, string
);
kuaipai(list
, left
, i
- 1);
kuaipai(list
, i
+ 1, right
);
}
}