給定一組非負(fù)整數(shù) nums,重新排列它們每個(gè)數(shù)字的順序(每個(gè)數(shù)字不可拆分)使之組成一個(gè)最大的整數(shù)。
注意:輸出結(jié)果可能非常大,所以你需要返回一個(gè)字符串而不是整數(shù)。
示例 1:
輸入:nums = [10,2]
輸出:"210"
示例 2:
輸入:nums = [3,30,34,5,9]
輸出:"9534330"
來源:力扣(LeetCode)
鏈接:https://leetcode-cn.com/problems/largest-number
解題思路
將整型轉(zhuǎn)為字符串?dāng)?shù)字,然后自定義比較器,用a + b
和b + a
比較字符串大小,并降序排序,最終將數(shù)組拼接成字符串即可
特殊情況:排序完第一個(gè)字符串是"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();
}
}