tailgo / poorguy-fly

1 stars 0 forks source link

66. 加一(简单) - https://leetcode-cn.com/problems/plus-one/submissions/ #10

Open tailgo opened 5 years ago

tailgo commented 5 years ago

暴力从后往前遍历 执行用时 : 84 ms, 在Plus One的JavaScript提交中击败了95.89% 的用户 内存消耗 : 33.7 MB, 在Plus One的JavaScript提交中击败了51.67% 的用户

/**
 * @param {number[]} digits
 * @return {number[]}
 */
var plusOne = function(digits) {
    for (var i = digits.length - 1; i >= 0; --i) {
        if (digits[i] + 1 == 10) {
            digits[i] = 0;
        } else {
            digits[i] += 1;
            return digits;
        }
    }
    if (digits[0] == 0) {
        return [1].concat(digits);
    }
};

还有就是递归遍历 执行用时 : 84 ms, 在Plus One的JavaScript提交中击败了95.89% 的用户 内存消耗 : 33.4 MB, 在Plus One的JavaScript提交中击败了92.93% 的用户

/**
 * @param {number[]} digits
 * @return {number[]}
 */
var plusOne = function(digits) {
    function addOne(digit, size) {
        if (size == 0) {
            return [1].concat(digit)
        }
        if (digit[size - 1] + 1 == 10) {
            digit[size - 1] = 0;
            return addOne(digit, size - 1);
        } else {
            digit[size - 1] = digit[size - 1] + 1;
            return digit;
        }
    }

    return addOne(digits, digits.length);
};
AmelloAster commented 5 years ago

执行用时 : 72 ms, 在 Plus One 的 JavaScript 提交中击败了 98.90% 的用户 内存消耗 : 34.2 MB, 在 Plus One 的 JavaScript 提交中击败了 5.14% 的用户 进行下一个挑战:

/**
 * @param {number[]} digits
 * @return {number[]}
 */
 var plusOne = function(digits) {
   let len = digits.length
   let right = []
   if (digits.length - 1 >= 0) {
       right = new Array(digits.length - 1).fill(0)
   }
   right.push(1)

   for (let i= len-1; i > -1; i--) {
    //console.log(digits, right, i);
       if (digits[i] + right[i] >= 10 && i) {
            if (i-1 >=0) {right[i-1] = 1}
            digits[i] = (digits[i] + right[i]) % 10
       }
       else {
            digits[i] = (digits[i] + right[i])
       }

       if (i === 0 && digits[i] >= 10) {
            num = digits[i]
            digits[i] = num % 10
            digits.unshift(num/10)

        }

   }
        return digits
};