1. 程式人生 > >leecode中初級演算法中陣列加一

leecode中初級演算法中陣列加一

這裡寫圖片描述

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;i<digits.length;i++){ digits[i]=0 } 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
};