刚开始犯得错误:直接将整型数组去从大到小去排序,以为就是正确结果。
用例: 10,1
我的输出会是101,而正确的是110,所以这很明显是错误的,考虑不周到。
那么直接用整型的就不行,那就另辟蹊径,用字符串形式进行排序。
但是排序的规则要如何定义呢?
我们知道,两个字符串之间比较大小的是比较每一个字符的大小,遇到第一个不相等的字符则会根据其ASCII码来比较大小,我们都知道整型数字越大,ASCII码也越大,所以我们只需要比较A+B跟B+A之间的大小,将数组按照这个规则去排序,拍出来的不就是我们想要的结果了吗?
public String solve (int[] nums) {
// 3 32 321
if(nums == null || nums.length == 0)
return "";
int n = nums.length;
String[] strs = new String[n];
for(int i = 0; i < n; i++){
strs[i] = nums[i]+"";
}
Arrays.sort(strs,(s1,s2)->{
return (s2+s1).compareTo(s1+s2); /*降序排序*/
});
if(strs[0].equals("0"))
return "0";
StringBuffer sb = new StringBuffer();
for(String num:strs)
sb.append(num);
return sb.toString();
}

京公网安备 11010502036488号