leecode中初級演算法中陣列加一
阿新 • • 發佈:2018-12-07
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
};