LeetCode-179-最大数

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

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

示例 1:

输入:nums = [10,2]
输出:"210"
示例 2:

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

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/largest-number

解题思路

将整型转为字符串数字,然后自定义比较器,用a + bb + 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();
    }
}

你可能感兴趣的:(LeetCode-179-最大数)