题目描述
输入一个正整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个。例如输入数组{3,32,321},则打印出这三个数字能排成的最小数字为321323。
个人理解和感觉,题目不是很难,比较简单,但是有需要注意的地方,1,数字的拼接不能用int或者long,数组很大会溢出。2,排序规则,要重新定义,根据,a和b的前后顺序不一样,可以得到两个数,ab和ba比较ab和ba,如果ab>ba那么a就大于b,反之,b小于a。有了新的排序规则,接下来先择一个排序算法就可以了。下面用的是冒泡,比较好理解。也可以用快排等一些时间复杂度比较低的排序算法。
public String PrintMinNumber(int [] numbers) {
String[] ass= new String[numbers.length];
for (int i = 0; i < numbers.length; i++) {
ass[i] = String.valueOf(numbers[i]);
}
String res = "";
for (int i = 0; i < ass.length; i++) {
for (int j = i+1; j < ass.length; j++) {
String str1 = ass[i]+ass[j];
String str2 = ass[j]+ass[i];
if (compare(str1, str2)==1) {
String a = ass[i];
ass[i] = ass[j];
ass[j] = a;
}
}
res+=ass[i];
}
// System.out.println(res)
return res;
}
static int compare(String str1,String str2){
for (int i = 0; i < str1.length(); i++) {
if (str1.charAt(i)>str2.charAt(i)) {
return 1;
}else if (str1.charAt(i)<str2.charAt(i)) {
return -1;
}
}
return 0;
}