力扣66:大数加1/大数减1

0 阅读1分钟

力扣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; 
};