import java.util.ArrayList;
import java.util.Comparator;
/**
* 题目:输入一个正整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个。
* 例如输入数组{3,32,321},则打印出这三个数字能排成的最小数字为321323。
* @author hexiaoli
* 思路:剑指offer
* eg:
* 1)将所有数字存入ArrayList,重写ArrayList类sort()方法里的Comparator比较器,重新定义比较规则为:
* 若ab<ba,则a<b;
* 若ab>ba,则a>b;
* 若ab=ba,则a=b;
* 将ArrayList中排完序的所有数字连接起来。
* 2)
*/
public class Main{
public static String PrintMinNumber(int[] numbers) {
StringBuilder sb = new StringBuilder();
ArrayList<Integer> arrayList = new ArrayList<>();
for (int i = 0; i < numbers.length; i++) {
arrayList.add(numbers[i]);
}
arrayList.sort(new Comparator<Integer>() {
// 重写比较规则
@Override
public int compare(Integer str1, Integer str2) {
String s1 = str1 + "" + str2;
String s2 = str2 + "" + str1;
// 如果ab小于ba,则表示a小于b,将a排在b前面
return s1.compareTo(s2);
}
});
// 连接排完序的所有数字
for (int i : arrayList) {
sb.append(i);
}
return sb.toString();
}
public static void main(String[] args) {
int[] numbers= {3,32,321};
System.out.println(PrintMinNumber(numbers));
}
}