【力扣(LeetCode)】 給定一個由整數組成的非空數組所表示的非負整數,在該數的基礎上加一

【力扣題庫】#66 加一

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

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

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

示例 1:

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

示例 2:

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

該題目來自力扣題庫

測試用例

以下幾個測試用例,方便大家寫完代碼後,測試

[1,2,3] > [1,2,4]
[9] > [1,0]
[9,9,9] > [1,0,0,0]
[6,1,4,5,3,9,0,1,9,5,1,8,6,7,0,5,5,4,3] >
[6,1,4,5,3,9,0,1,9,5,1,8,6,7,0,5,5,4,4]

思路

如果數組的最後以爲不是9,則直接+1即可。所以這裏需要重點考慮數字9的情況,比如99,999,9999之類,這樣的話+1會進一,數組長度也會增加,變成100,1000等;
我們可以使用循環從後往前看,判斷當前數組的元素是數字9的情況。如果不是9,直接加1並且返回數組;如果是9的話讓當前位直接變成0,接着循環判斷9的情況。
如果是數組元素全部都是9,即[9,9,9,9,9]這種情況,我們可以建立一個新數組,新數組的長度要比輸入的數組長度大一位,且第一位是1,後面都是0.

參考代碼

var plusOne = function(digits) {

    let len = digits.length;
    // 從後面往前遍歷數組,判斷9的情況
    for(let i = len-1;i>=0;i--){
        if(digits[i] == 9){
            digits[i] = 0;
        }else{
            digits[i] ++;
            return digits;
        }     
    }
    // 如果全部都是9,建立新的數組
    let newDigits = [1].concat(digits);
    return newDigits;     
};

總結

之前也有想過直接把數組轉換成數字,讓數字直接+1,然後再轉回數組的形式。但是發現對於長度比較大的數字,會出現誤差,因爲number類型是有長度限制。

以上代碼和思路有不合適的地方,還請大家指正,希望於大家共同進步。

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章