题目描述:
解题思路分析:
模拟十进制;
分析有几种情况,按情况来定
不同解法:
/**
* @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;
};
参考链接:
- 66. Plus One · leetcode
来源:https://www.cnblogs.com/z7luv/p/15954792.html
本站部分图文来源于网络,如有侵权请联系删除。