给定一组非负整数 nums,重新排列它们每个数字的顺序(每个数字不可拆分)使之组成一个最大的整数。
注意:输出结果可能非常大,所以你需要返回一个字符串而不是整数。
示例 1:
输入:nums = [10,2]
输出:"210"
示例 2:
输入:nums = [3,30,34,5,9]
输出:"9534330"
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/largest-number
解题思路
将整型转为字符串数字,然后自定义比较器,用a + b
和b + a
比较字符串大小,并降序排序,最终将数组拼接成字符串即可
特殊情况:排序完第一个字符串是"0"则直接返回"0"
代码
class Solution {
public String largestNumber(int[] nums) {
int n = nums.length;
String[] numbers = new String[n];
for (int i = 0; i < n; i++) {
numbers[i] = String.valueOf(nums[i]);
}
Arrays.sort(numbers, (o1, o2) -> {
StringBuilder s1 = new StringBuilder(o1);
StringBuilder s2 = new StringBuilder(o2);
return -s1.append(o2).toString().compareTo(s2.append(o1).toString());
});
if (numbers[0].equals("0")) {
return "0";
}
StringBuilder result = new StringBuilder();
for (String number : numbers) {
result.append(number);
}
return result.toString();
}
}