45 把数组排成最小的数
1 题目描述
输入一个非负整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个。
示例:
输入: [10,2]
输出: "102"
2 题目分析
考查自定义排序使用情况,具体如下:
- 将nums转化为字符串数组类型,定义一种排序规则(x,y) -> ((x+y).compareTo(y+x)),原则:高位的尽可能小
- 直接StringBuilder相加即可
2 代码
public String minNumber(int[] nums) {
if (nums == null || nums.length == 0) return null;
int len = nums.length;
String[] strs = new String[len];
for (int i = 0; i < len; i++) {
strs[i] = String.valueOf(nums[i]);
}
Arrays.sort(strs, (x, y) -> ((x + y).compareTo(y + x))); // 如果x+y自然序大于y+x,交换
StringBuilder sb = new StringBuilder();
for (String str : strs) {
sb.append(str);
}
return sb.toString();
}