【剑指Offer】把数组排成最小的数

题目

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

实现

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
public String PrintMinNumber(int[] numbers) {
StringBuilder sb = new StringBuilder();
String[] str = new String[numbers.length];

for (int i = 0; i < numbers.length; i++)
str[i] = String.valueOf(numbers[i]);

Arrays.sort(str, new Comparator<String>() {
@Override
public int compare(String o1, String o2) {
String m = o1 + o2;
String n = o2 + o1;
return m.compareTo(n);
}
});

for (int i = 0; i < str.length; i++)
sb.append(str[i]);

return sb.toString();
}