题目描述:输入一个正整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个。例如输入数组{3,32,321},则打印出这三个数字能排成的最小数字为321323。
分析:
不能直接调用Arrays.sort,因为这里是整数int数组,而传入的比较器是Integer,不匹配,所以将数组存到list中
* 排序规则如下:字符串拼接
* 若ab > ba 则 a > b,
* 若ab < ba 则 a < b,
* 若ab = ba 则 a = b;
* 解释说明:
* 比如 "3" < "31"但是 "331" > "313",所以要将二者拼接起来进行比较。
题目要求最小的数,所以就是从小到大排序即可。
比较器原来返回值:正数,o1>o2, 为从小到大排序
现在还是从小到大,所以比较器返回正时,还是表示o1>o2,也就是o1o2>o2o1
代码:
package sort;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
public class Demo11 {
public static void main(String[] args){
int[] a={3,32,321};
System.out.println(printArray(a));
}
public static String printArray(int[] a){
ArrayList<Integer> list=new ArrayList<>();
for(int i=0;i<a.length;i++)
list.add(a[i]);
Collections.sort(list, new Comparator<Integer>(){
@Override
public int compare(Integer o1, Integer o2) {
String s1=o1+""+o2;
String s2=o2+""+o1;
return s1.compareTo(s2);
}
});
StringBuilder sb=new StringBuilder();
for(int i:list)
sb.append(i);
return sb.toString();
}
}