LeetCode-179-最大數

雄獅虎豹發表於2022-04-13

最大數

題目描述:給定一組非負整數 nums,重新排列每個數的順序(每個數不可拆分)使之組成一個最大的整數。

注意:輸出結果可能非常大,所以你需要返回一個字串而不是整數。

示例說明請見LeetCode官網。

來源:力扣(LeetCode)
連結:https://leetcode-cn.com/probl...
著作權歸領釦網路所有。商業轉載請聯絡官方授權,非商業轉載請註明出處。

解法一:陣列排序

首先,通過排序將給定的nums排序好,排序邏輯是通過一個比較器實現的,就是比較2個數正向連線和反向連線哪個比較大,然後按順序將排序後的陣列連線起來即可。

備註:邏輯比較清晰,但是還是提交了多次才提交成功,主要遇到以下兩個問題:

  • 沒考慮很大的數的情況,使用Integer導致越界了,改成Long才對;
  • 沒考慮拼接後的數字首的0是無意義的,需要去掉。

這兩點都很基礎,以後注意。

import java.util.Arrays;

public class LeetCode_179 {
    public static String largestNumber(int[] nums) {
        String[] numsStr = new String[nums.length];
        for (int i = 0; i < nums.length; i++) {
            numsStr[i] = String.valueOf(nums[i]);
        }

        Arrays.sort(numsStr, (o1, o2) -> {
            if (Long.valueOf(o1 + o2) > Long.valueOf(o2 + o1)) {
                return 1;
            } else if (Long.valueOf(o1 + o2) < Long.valueOf(o2 + o1)) {
                return -1;
            } else {
                return 0;
            }
        });

        StringBuilder result = new StringBuilder();
        for (int i = numsStr.length - 1; i >= 0; i--) {
            result.append(numsStr[i]);
        }
        // 找到第一個不為0的數字
        int index = 0;
        for (char c : result.toString().toCharArray()) {
            if (c != '0') {
                break;
            }
            index++;
        }
        return index == result.length() ? "0" : result.substring(index);
    }

    public static void main(String[] args) {
        int[] nums = new int[]{10, 2};
        // 測試用例1,期望輸出: 210
        System.out.println(largestNumber(nums));

        int[] nums2 = new int[]{3, 30, 34, 5, 9};
        // 測試用例2,期望輸出: 9534330
        System.out.println(largestNumber(nums2));

        int[] nums3 = new int[]{999999991, 9};
        // 測試用例3,期望輸出: 9999999991
        // 考慮越界問題
        System.out.println(largestNumber(nums3));

        int[] nums4 = new int[]{0, 0};
        // 測試用例4,期望輸出: 0
        // 考慮結果中的字首0
        System.out.println(largestNumber(nums4));
    }
}
【每日寄語】 不在沉默中爆發,就在沉默中滅亡。

相關文章