NO.179 最大数 中等
思路一:自定义排序 需求是按照每个数字首位递减排序,首位相等则比较下一位,最终按照这个规则完成排序。将所有元素串起来得到最大的整数。
先比较首位,首尾相等再比较下一位,并且每一位的比较按照字典排序即可。这非常符合字符串的大小比较。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
| public String largestNumber(int[] nums) { String[] strs = new String[nums.length]; for (int i = 0; i < nums.length; i++) { strs[i] = String.valueOf(nums[i]); } Arrays.sort(strs, (e1, e2) -> { String x = e1 + e2; String y = e2 + e1; return y.compareTo(x); }); if (strs[0].equals("0")) return "0"; StringBuilder ans = new StringBuilder(); for (String str : strs) { ans.append(str); } return ans.toString(); }
|
踩个坑: Lambda 的时候传值先给 e2 再给 e1 ,例如 [“10”,”2”],传值结果是 e2=10,e1=2
时间复杂度:O(nlogn) 取决于排序的时间复杂度。
空间复杂度:O(n)
本人菜鸟,有错误请告知,感激不尽!
更多题解和源码:github