leecode中初级算法中数组加一

leecode中初级算法中数组加一_第1张图片

js解法及思路

/**
 * @param {number[]} digits
 * @return {number[]}
 */
/**
注意点
1.最后一位是否为9,为9的话,要进位,赋0下一位加1
2.如果首位为0,加一,首位为9整个数组必是返回【10000...】
整个流程是:
判断当前位是否为9,若是则赋值0,继续循环,下一位会加一
若不为9,当前位加一,跳出循环
若首位为9则必定返回【10000...】
若不为9则加一返回
*/
var plusOne = function(digits) {
    for(let i=digits.length-1;i>=0;i--){
        //判断最后一位是否为9
        if(i!=0&&digits[i]==9){

            digits[i]=0
            continue;
        }
        //中间的数
        else if (i !=0){
            digits[i]=digits[i]+1
            break;
        }
        //首位
        else if (i==0){
            if(digits[i]==9){
                digits= new Array(digits.length+1)
                digits[0]=1;
                for(i=1;i0
                }
                break;
            }
            else{
                digits[i]=digits[i]+1
                break;
            }
        }
    }
    return digits
};

优化,优化原则是,判断数组当前位是否为首位,首位的处理情况为两种,非首位也有两种

var plusOne = function (digits) {
  for (let i = digits.length - 1; i >= 0; i--) {
      //当前位为非首位
    if (i != 0) {
      //判断是否为9
      if (digits[i] == 9) {
        digits[i] = 0
        continue;
      }
      //中间的数
      else {
        digits[i] = digits[i] + 1
        break;
      }
    }
    //首位
    else if (i == 0) {
      if (digits[i] == 9) {
        digits = new Array(digits.length + 1)
        digits[0] = 1;
        for (i = 1; i < digits.length; i++) {
          digits[i] = 0
        }
        break;
      } else {
        digits[i] = digits[i] + 1
        break;
      }
    }
  }
  return digits
};

你可能感兴趣的:(面试,算法)