长大后想做什么?做回小孩!

0%

LeetCode——最大数

NO.179 最大数 中等

Yg6L4J.png

思路一:自定义排序 需求是按照每个数字首位递减排序,首位相等则比较下一位,最终按照这个规则完成排序。将所有元素串起来得到最大的整数。

先比较首位,首尾相等再比较下一位,并且每一位的比较按照字典排序即可。这非常符合字符串的大小比较。

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