题目描述
输入一个正整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个。例如输入数组{3,32,321},则打印出这三个数字能排成的最小数字为321323。
算法:
首先思考,当我们将数组随机排列时,它们最后形成的数字的位数都是相同的,那么如果前边的位数上的数字越小,则最后的结果越小,也就是说一个数组为[3, 134,34, 45], 则显然当最后形成的数字的首位为1的时候最小,此时我们确定了第一个数字,则剩下的数组中显然应该是3, 那么如果我们将所有的数组元素按照从第一位从小到大进行排序,则最后顺序形成的数字必然最小。
代码如下:
public String PrintMinNumber(int [] numbers) {
if (numbers == null || numbers.length < 0){
return "";
}
ArrayList<String> data = new ArrayList<>();
for (int i = 0; i < numbers.length; i++) {
data.add(numbers[i] + "");
}
Collections.sort(data, new Comparator<String>() {
@Override
public int compare(String o1, String o2) {
String a = o1 + o2;
String b = o2 + o1;
return a.compareTo(b);
}
});
StringBuilder result = new StringBuilder();
for (String s :
data) {
result.append(s);
}
return result.toString();
}