输入一个正整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个。例如输入数组{3,32,321},则打印出这三个数字能排成的最小数字为321323。
对数组进行全排列,从全部组合中找出最小的值,时间复杂度太大。
将元素添加入String数组(防止有大数),然后对String数组进行排序,自定义排序规则。
例如:a=3,b=21,ab>ba,所以要将a放到b后面。
public String PrintMinNumber(int [] numbers) {
if(numbers == null || numbers.length == 0) return "";
int len = numbers.length;
String[] str = new String[len];
StringBuilder sb = new StringBuilder();
for(int i=0;i<len;i++){
str[i] = String.valueOf(numbers[i]); //整形转字符串,防止大数
}
Arrays.sort(str,new Comparator<String>(){ //匿名内部类,自定义比较器
@Override
public int compare(String s1,String s2){
String c1 = s1+s2;
String c2 = s2+s1;
return c1.compareTo(c2); //若c1 > c2 ,则s1 放到 s2 后面
}
});
for(int i=0;i<len;i++){
sb.append(str[i]); //排序完成,进行拼接
}
return sb.toString(); //返回字符串
}
原文:https://www.cnblogs.com/le-le/p/12776148.html