1.题目描述
输入一个非负整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个。
示例 1:
输入: [10,2]
输出: "102"
示例 2:
输入: [3,30,34,5,9]
输出: "3033459"
2.解题思路与代码
2.1 解题思路
题目要求对数组进行排序拼接,拼接后的数字最小。要是组合后的数字最小,就需要将数字最高位越小放在越前面,并且数字相同位数越少的也越靠前,那么我们就需要对数组转换成字符串列表,然后将字符串列表进行排序,对比拼接后的字符串的字典序就可以了,字典序小的在前面,大的靠后,最后将字符串列表拼接起来即可。
2.2 代码
class Solution {
public String minNumber(int[] nums) {
StringBuilder builder = new StringBuilder();
List<String> list = new ArrayList<>();
for (int num : nums) {
list.add(String.valueOf(num));
}
list.sort((o1, o2) -> {
String s1 = o1+o2;
String s2 = o2+o1;
return s1.compareTo(s2);
});
for (String s : list) {
builder.append(s);
}
return builder.toString();
}
}
2.3 测试结果
通过测试
3.总结
- 将数字转换成字符串列表
- 列表按照字典序进行排序