LeetCode#66-Plus One-加一

一、題目

給定一個由整數組成的非空數組所表示的非負整數,在該數的基礎上加一。

最高位數字存放在數組的首位, 數組中每個元素只存儲單個數字。

你可以假設除了整數 0 之外,這個整數不會以零開頭。

示例1:

輸入: [1,2,3]
輸出: [1,2,4]
解釋: 輸入數組表示數字 123。

示例2:

輸入: [4,3,2,1]
輸出: [4,3,2,2]
解釋: 輸入數組表示數字 4321。

二、題解

普通情況:9 以外的數字,直接加 1。
特殊情況:9 加 1,要進位。又分兩種情況:
1)長度不變:如 19 + 1 = 20;
2)長度加 1:如 99 + 1 = 100。

從後向前遍歷,給當前位置加 1 並 取餘,如果取餘後的結果不爲0,說明是上面列出的普通情況;反之則是需要進位的特殊情況,如果遍歷到開頭,取餘的結果仍然是0,則說明數組的長度要加1,用 array_unshift 函數可以給數組開頭添加一個 1 即可。

時間複雜度:O(n),空間複雜度:O(1)。

function plusOne($digits) {
    $len = count($digits);
    //因爲是給最後一位加一,所以從後向前判斷
    for ($i = $len - 1; $i >= 0; $i--) {
        //給當前位置加1 
        $digits[$i]++;
        /**
         * 該位置加1後和10取餘,
         * 如果結果是 0,說明需要進一位,繼續循環,反之則加1結束,直接返回
         */
        $digits[$i] %= 10;
        if ($digits[$i] % 10 != 0) {
            return $digits;
        }
    }
    //到這一步,說明是99、999這樣的情況,這時digit已經變成 00、000,只需要給數組開頭加個1即可。
    array_unshift($digits, 1);
    return $digits;
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章