刚开始犯得错误:直接将整型数组去从大到小去排序,以为就是正确结果。
用例: 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(); }