【力扣題庫】#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類型是有長度限制。
以上代碼和思路有不合適的地方,還請大家指正,希望於大家共同進步。