【Leetcode】179.最大数

179.最大数

题目

给定一组非负整数,重新排列它们的顺序使之组成一个最大的整数。

示例 1:
输入: [10,2]
输出: 210

示例 2:
输入: [3,30,34,5,9]
输出: 9534330

方法

  • 先创建一个字符串数组strs,用来保存各数字的字符串格式

  • 应用以下排序判断规则,对strs进行排序:

    • 若拼接字符串 $x+y > y+x, 则x大于y$
    • 若拼接字符串 $x+y < y+x, 则x小于y$
    • 例如:”330” > “303”,则3大于30

    注意处理”0”的情况

代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
class Solution {
public static String largestNumber(int[] nums) {
String res = "";
String[] strs = new String[nums.length];
for(int i = 0; i < nums.length; i++){
strs[i] = String.valueOf(nums[i]);
}
Arrays.sort(strs, new MyComparator());
if(strs[strs.length - 1].equals("0"))
return "0";
//Arrays.sort默认是从小到大排序,因此我们从排序后的字符串数组中从后向前依次读出大数
for(int i = strs.length - 1; i >= 0; i--){
res += strs[i];
}
return res;

}
public static class MyComparator implements Comparator<String>{
@Override
public int compare(String o1, String o2) {
return (o1 + o2).compareTo(o2 + o1);
}
}
}