把数组排成最小的数

问题描述

输入一个正整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个。例如输入数组{3,32,321},则打印出这三个数字能排成的最小数字为321323。

思路分析

将整数数组转化为字符串数组,然后通过对字符串排序,这里利用自定义比较器,通过每两个字符比较自然顺序,将最小的排到前面,然后放到一个可变字符数组中即可

码上有戏

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
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]=numbers[i]+"";
StringBuilder sb=new StringBuilder();
Arrays.sort(strs,new Comparator<String>(){
public int compare(String o1,String o2){
return (o1+o2).compareTo(o2+o1);
}
});
for(int i=0;i<strs.length;i++)
sb.append(strs[i]);
return sb.toString();
}

热评文章