蚂蚁金服校招真题

原题链接:
https://leetcode.cn/problems/largest-number/description/

贪心 + 排序
将两个字符串进行 拼接后进行判断 a + b > b + a 则将a排在前面

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
class Solution {
public String largestNumber(int[] nums) {
int n = nums.length;
String [] ss = new String[n];
for (int i = 0 ; i < nums.length ;i++){
// 这里要给注意要加一个 "" 或者直接给ss全部赋初始值为 ""
// 就不会变成 null + nums[i]
ss[i] = "" + nums[i];
}

Arrays.sort(ss,((o1, o2) -> (o2 + o1).compareTo(o1 + o2)));
String ans = "";
for (int i = 0 ; i < ss.length ; i++){
ans += ss[i];
}

// 再特判一下 前导零
int k = 1;
while(k < n && ans.charAt(k - 1) == '0'){
k++;
}

return ans.substring(k - 1);
}
}