LeetCode 66. Plus One
題目
Given a non-negative number represented as an array of digits, plus one to the number.
The digits are stored such that the most significant digit is at the head of the list.
翻譯
給一包含非數整數的陣列,其中每一個值代表該位數的值,對這個陣列加1。
範例:
19 = [1,9] , 19+1 = 20 = [2,0]。
思路
- 陣列最後一個數是個位數,所以從後面開始讀,個位數+1後,如果有進位,儲存進位值,val = 0,沒進位直接存儲。
- 處理十位數,如果個位數有進位,十位數+1,再判斷十位數是否有進位
- 重複上面動做值到陣列結束
解題
/**
* @param {number[]} digits
* @return {number[]}
*/
var plusOne = function(digits) {
// 判斷相加後是否需進位
var carry = 0;
for(var i = digits.length - 1 ; i >= 0 ; i--){
// 目前位數 = 目前位數+前面是否進位
digits[i]= digits[i] + carry;
// list最後一個數字,也就是個位數,給他+1
if(i == digits.length - 1 ){
digits[i] = digits[i] + 1;
}
// 如果目前這個位數等於10(因為只+1,所以不會超過10),進位
if(digits[i] == 10){
digits[i] = 0;
carry = 1;
} else {
carry = 0;
}
}
// 最後如果有進位
if(carry == 1){
digits.unshift(carry);
}
return digits;
};