179. 最大数

题目描述

给定一组非负整数 nums,重新排列每个数的顺序(每个数不可拆分)使之组成一个最大的整数。

注意:输出结果可能非常大,所以你需要返回一个字符串而不是整数。

输入输出

1
2
3
4
5
输入:nums = [10,2]
输出:"210"

输入:nums = [3,30,34,5,9]
输出:"9534330"

基本思路

比较类似的题目:剑指 Offer 45. 把数组排成最小的数

  • 以下”+”是前后拼接起来的意思
  • x+y > y+x x”大于”y x在y后边
  • x+y < y+x x”小于”y x在y前边
  • Java中 x.compareTo(3)
    • x>3 返回1
    • x=3 返回0
    • x<3 返回-1

java实现

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
class Solution {
public String largestNumber(int[] nums) {
String[] str = new String[nums.length];
for(int i = 0; i < str.length; i++){
str[i] = String.valueOf(nums[i]);
}
Arrays.sort(str,(x, y) -> (y+x).compareTo(x+y));
StringBuilder sb = new StringBuilder();
for(String s:str){
sb.append(s);
}
String res = sb.toString();

//为了处理[0,1,2,3]这种情况 最后会输出"3210"
if(res.charAt(0) == '0'){
return "0";
}
return res;
}
}