1. 本题知识点
数组
2. 题目描述
输入一个正整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个。例如输入数组 {3,32,321},则打印出这三个数字能排成的最小数字为 321323。
3. 解题思路
本题实际上希望我们找到一个排序规则,数组根据这个排序规则进行重排之后可以连成一个最小的数字。要确定这样的排序规则,也就是对于两个数字 m 和 n,通过一个规则确定哪个应排在前面。
根据题目要求,我们可以发现,两个数字 m 和 n 能拼接成 mn 和 nm,如果 mn<nm,那 m 应该在前;如果 nm<mn,那么 n 应该在前。因此,我们得到的排序规则如下:
- 若 mn>nm,则 m 大于 n
- 若 mn<nm,则 m 小于 n
- 若 mn=nm,则 m 等于 n
根据上述规则,我们需要先把数字转换成字符串再进行比较,因为需要拼接起来。比较完之后按顺序连接成一个字符串即可。
4. 代码
public class Solution {
public String PrintMinNumber(int[] numbers) {
String result = "";
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 m, String n) {
String mn = m + n;
String nm = n + m;
return mn.compareTo(nm);
}
});
// 最后拼接成一个字符串
for (String s : str) {
result += s;
}
return result;
}
}