題目描述:
給定一個由 整數(shù) 組成的 非空 數(shù)組所表示的非負(fù)整數(shù)贯卦,在該數(shù)的基礎(chǔ)上加一盼铁。
最高位數(shù)字存放在數(shù)組的首位豺瘤, 數(shù)組中每個元素只存儲單個數(shù)字家淤。
你可以假設(shè)除了整數(shù) 0 之外乎莉,這個整數(shù)不會以零開頭埠啃。示例1:
輸入:digits = [1,2,3]
輸出:[1,2,4]
解釋:輸入數(shù)組表示數(shù)字 123焚碌。示例2:
輸入:digits = [4,3,2,1]
輸出:[4,3,2,2]
解釋:輸入數(shù)組表示數(shù)字 4321。示例3:
輸入:digits = [0]
輸出:[1]提示:
- 1 <= digits.length <= 100
- 0 <= digits[i] <= 9
來源:力扣(LeetCode)
鏈接:https://leetcode-cn.com/problems/plus-one
解法:
思路:
當(dāng)我們對數(shù)組 digits 加一時霸妹,我們只需要關(guān)注 digits 的末尾出現(xiàn)了多少個 9 即可十电。我們可以考慮如下的三種情況:
- 如果 digits 的末尾沒有 9,例如 [1,2,3]叹螟,那么我們直接將末尾的數(shù)加一鹃骂,得到 [1,2,4] 并返回;
- 如果 digits 的末尾有若干個 9罢绽,例如[1,2,3,9,9]畏线,那么我們只需要找出從末尾開始的第一個不為 9 的元素,即 3良价,將該元素加一寝殴,得到 [1,2,4,9,9]蒿叠。隨后將末尾的 9 全部置零,得到 [1,2,4,0,0] 并返回蚣常。
- 如果 digits 的所有元素都是 9市咽,例如[9,9,9,9,9],那么答案為 [1,0,0,0,0,0]抵蚊。我們只需要構(gòu)造一個長度比digits 多 1 的新數(shù)組施绎,將首元素置為 1,其余元素置為 0 即可贞绳。
- 其中會用到fill方法 fill():用一個固定值填充數(shù)組谷醉,返回結(jié)果為新的數(shù)組。不會改變原數(shù)組冈闭。新數(shù)組 = 數(shù)組.fill(固定值);
代碼:
var plusOne = function(digits) {
let i,j,len=digits.length;
for(i=len-1;i>=0;i--){
if(digits[i]!=9){
digits[i]++;
for(j=i+1;j<len;j++){
digits[j]=0;
}
return digits;
}
}
let arr = new Array(len+1).fill(0);
arr[0]=1;
return arr;
};
執(zhí)行結(jié)果:
image.png