题目描述
输入一个正整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个。例如输入数组{3,32,321},则打印出这三个数字能排成的最小数字为321323。
思路:
其实这就是一个排序的算法,将数排列成能组合成最小的数。我第一时间想的是按照位置排序,先排好第1个数的位置,再在这个基础上排好第二个数的位置….
后来参考了一下答案,发现其实思路挺简单的。排序的算法就在于只要保证前一个数和后一个数组合小于后一个数和前一个数的组合就可以了。
这里使用了匿名对象Comparator去改写排序的方法。
import java.util.*;
public class Solution {
public String PrintMinNumber(int [] numbers) {
if(numbers.length == 0){
return "";
}
if(numbers.length == 1){
return "" + numbers[0];
}
ArrayList<Integer> list = new ArrayList<>();
StringBuilder s = new StringBuilder("");
//将数组装入到list中
for(int i = 0;i < numbers.length;++i){
list.add(numbers[i]);
}
//排序,改写排序方法
Collections.sort(list,new Comparator<Integer>(){
public int compare(Integer n1,Integer n2){
return ((n1 + "" + n2).compareTo(n2 + "" + n1));
}
});
for(Integer i : list){
s.append(i.toString());
}
return s.toString();
}
}