数组 - 加一

题目

https://leetcode-cn.com/explore/interview/card/top-interview-questions-easy/1/array/27/

个人解法

测试用例数(个) 执行用时(ms) 战胜
109 84 99.35%
/**
 * @param {number[]} digits
 * @return {number[]}
 */
var plusOne = function(digits) {
    for (var i = digits.length - 1 ; i >= 0 ; i--) {
        if (i === digits.length - 1) {
            digits[i] = digits[i] + 1;
        }
        
        if (digits[i] > 9) {
            var remainder = digits[i] % 10;
            var carry = ~~(digits[i] / 10);
            
            digits[i] = remainder;
            
            if (digits[i - 1] !== undefined) {
                digits[i - 1] = digits[i - 1] + carry;
            } else {
                digits.unshift(carry);   
            }
        }
    }
    
    return digits;
};

最快解法

测试用例数(个) 执行用时(ms) 战胜
61 56 100%
/**
 * @param {number[]} digits
 * @return {number[]}
 */
var plusOne = function(digits) {
    let num = 1,
        i = digits.length;
    while(i) {
        i--;
        if (digits[i] === 9) {
            digits[i] = 0;
            num = 1;
        } else {
            digits[i] += num;
            num = 0;
            break;
        }
    }
    if (!i && num)
        digits.unshift(1);
    return digits;
};

分析

类似大数计算,没啥好说。

*****
Written by Zheng Yu on 13 May 2019