把数组排成最小的数
题目描述
输入一个正整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个。例如:输入数组{3,32,321},则打印出这三个数能排成的最小的数字321323.
思路分析
刚开始会想到最麻烦的方法就是全排列,然后再逐一比较找到最小的数,很明显效率是非常低的,而且存在潜在的问题:大数问题。所以开始考虑用字符串代替数字来进行处理,再由题意深度分析,题目中所求的数组组成的最小的数,即将数组按字典排序,于是可以想到通过Arrays的sort方法,重写比较器来实现。代码如下:
public String PrintMinNumber(int [] numbers) {
if(numbers==null||numbers.length==0)return "";
String[] strs=new String[numbers.length];
for(int i=0;i<numbers.length;i++){
strs[i]=Integer.toString(numbers[i]);
}
Arrays.sort(strs,new Comparator<String>(){
public int compare(String o1,String o2){
String c1=o1+o2;
String c2=o2+o1;
return c1.compareTo(c2);
}
});
StringBuffer sb=new StringBuffer();
for(String str:strs){
sb.append()
}
return sb.toString();
}