编程语言
首页 > 编程语言> > LeetCode系列之 (JavaScript) => 66. 加一

LeetCode系列之 (JavaScript) => 66. 加一

作者:互联网

题目描述:

解题思路分析:

模拟十进制; 分析有几种情况,按情况来定

不同解法:

/**
 * @param {number[]} digits
 * @return {number[]}
 */
// var plusOne = function(digits) {
    var n = digits.length;
    var count = n-1;
    while(count >= 0){
        digits[count] += 1;
        if(digits[count] >= 10){
            digits[count] = 0;
            if(count == 0){
                digits.unshift(1);
            }
        }else if(digits[count] <= 9){
            break;
        }
        count--;
    }
    return digits;
};

// // (改变结束循环的条件,运行速度一样)相当于没有改进
// /**
//  * @param {number[]} digits
//  * @return {number[]}
//  */
 var plusOne = function(digits){
     var n = digits.length;
     var count = n-1;
     ++digits[count];
     while(digits[count] > 9){
         digits[count] = 0;
         if(count == 0){
             digits.unshift(1);
         }else{
             ++digits[--count];
         }
     }
     return digits;
 }

// 继续改进 (“避重就轻”)// 最终结果是速度没有提高
// 改进思路: 
// 可以分为两种情况:
//1.不改变原数组长度: 
    //进1 的位置一定在数组里,且相应的位置数字一定小于9,并停止循环; 之后的位置的都为0;
    //循环方向从后往前;
//2.改变原数组长度 => 所有位置都等于10,长度增加1位,其他位置都为0
var plusOne = function(digits) {
    for(var i = digits.length-1; i>=0; i--){
        // 不改变原数组的长度
        if(digits[i] < 9){
            digits[i] +=1;
            break;
        }
        digits[i]=0;
    }
    //改变原数组的长度(co)
    if(digits[0] === 0){
        digits.unshift(1); 
        // var arr = new Array(digits.length + 1);
        // arr.fill(0,1);
        // arr[0] = 1;
        // digits = arr;
        
    }
    return digits;
};

参考链接:

标签:digits,count,加一,JavaScript,arr,数组,var,长度,LeetCode
来源: https://www.cnblogs.com/z7luv/p/15954792.html