力扣66:大数加1/大数减1
~~ 大数加1:
var plusOne = function(digits) {
for (let i = digits.length - 1; i >= 0; i--) {
digits[i]++; // 末尾加1
if (digits[i] < 10) {
// 如果没进位,直接返回结果,完事!
return digits;
}
// 如果到了这里,说明 digits[i] 变成了 10,置 0 进位
digits[i] = 0;
}
// 如果循环走完了还没 return,说明全是 9(如 999 -> 000)
// 需要在最前面补个 1
return [1, ...digits];
};
~~ 大数减1:
var minusOne = function(digits) {
for (let i = digits.length - 1; i >= 0; i--) {
if (digits[i] > 0) {
digits[i]--; // 够减,直接减
// 减完后,检查一下:如果开头多了一个没用的 0,把它删了
// 比如 [1, 0, 0] -> [0, 9, 9],我们需要把那个 0 删掉
if (digits[0] === 0 && digits.length > 1) {
digits.shift();
}
return digits; // 大功告成,提前退出
}
// 不够减(当前位是 0),变 9,继续循环向左借位
digits[i] = 9;
}
// 如果循环走完了还没 return,说明输入可能是 [0]
return digits;
};