LeetCode 179 Largest Number

問題描述:

給出一個整型數組,所有數字均>=0,問如何組合集中的數字才能形成一個最大的數字。

例如給出:[3, 30, 34, 5, 9], -----> 9534330.

思路:本人從字符串排序的角度考慮,試圖將所有數字看成字符串一起去排序,但是過程極其繁瑣,放棄。於是考慮從小範圍開始排序,不在放眼全局。例如先將前兩個3,30進行排序--->可以組成330和303兩種,顯然選擇330這種順序。再講第三個數字拿過來,是放在3左邊呢,還是放在3和30中間呢,還是放在30後邊呢?顯然將某數字放在最左側,表明以這個數字開頭的組合是最大的;反之,放在最右側說明這個數字不合適放在其他所有數字的前邊(廢話)。

 規律總結爲:每拿到一個新數字,遍將它與在它之前的所有已經排好序的數字進行組合後的比較----->這不就是插入排序啊!!!


AC代碼:

class Solution {
    public String largestNumber(int[] nums) {
        
        for (int i = 1; i < nums.length; i++) {
            int j = i;
            int temp = nums[j];
            while (j > 0 && (String.valueOf(temp) + String.valueOf(nums[j - 1])).compareTo((String.valueOf(nums[j - 1]) + String.valueOf(temp))) >= 0)
            //System.out.println();
            {
                nums[j] = nums[j - 1];
                j--;
            }
            nums[j] = temp;
        }
        String sum="";
        for (int i = 0; i < nums.length; i++) {
            sum+=String.valueOf(nums[i]);
        }
        if(sum.indexOf("0")==0)sum="0";
        return sum;
    }
}

發佈了47 篇原創文章 · 獲贊 0 · 訪問量 1萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章