46.把数组排成最小的数
输入一个正整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个。
例如输入数组 [3,32,321],则打印出这 3 个数字能排成的最小数字 321323。
数据范围:
数组长度 [0,500]。
样例:
输入:[3, 32, 321]
输出:321323
注意:
输出数字的格式为字符串。
代码:
class Solution {
public String printMinNumber(int[] nums) {
//将整数数组转换为字符串,方便拼接
String[] s = new String[nums.length];
for(int i = 0;i<nums.length;i++){
//将每个数字转换为字符串
s[i] = String.valueOf(nums[i]);
}
//自定义排序规则:若x+y>y+x,则x应该排在y后面(这里的+为拼接操作)
//例如:"3"+"30"="330" > "30"+"3"="303",所以"30"应排在"3"前面
Arrays.sort(s,new Comparator<String>(){
public int compare(String x,String y){
//比较两种拼接方式的字典序
return (x+y).compareTo(y+x);
}
});
//拼接排序后的字符串数组
StringBuilder sb = new StringBuilder();
for(int i = 0;i<s.length;i++)sb.append(s[i]);
//返回最终拼接结果
return sb.toString();
}
}

浙公网安备 33010602011771号