背景:
给定一个由 整数 组成的 非空 数组所表示的非负整数,在该数的基础上加一。
最高位数字存放在数组的首位, 数组中每个元素只存储单个数字。
你可以假设除了整数 0 之外,这个整数不会以零开头。
示例 1:
输入:digits = [1,2,3] 输出:[1,2,4] 解释:输入数组表示数字 123。示例 2:
输入:digits = [4,3,2,1] 输出:[4,3,2,2] 解释:输入数组表示数字 4321。示例 3:
输入:digits = [9] 输出:[1,0] 解释:输入数组表示数字 9。 加 1 得到了 9 + 1 = 10。 因此,结果应该是 [1,0]。
核心代码:
/**
* @param {number[]} digits
* @return {number[]}
* 代码有问题
*/
var plusOne = function (digits) {
let _arr = []
_arr = digits
const _arrLength = digits.length
digits.forEach((item, index) => {
if (index == digits.length - 1) {
if (0 <= item < 9) {
const _strLenght = item.toString().split('')
item += 1;
_arr[index] = item
const _strLenght2 = _arr[index].toString().split('')
if (_arrLength === 1) {
if (_strLenght !== _strLenght2) {
const tempArr = _strLenght2.join('').split('')
const temp = tempArr.map(item => {
return +item
})
_arr = temp
}
} else if (1 <= digits.length <= 100) {
//处理这样[9,9,9,...,9]
} else {
console.log('太长啦')
}
} else {
item.split('').join(',')
}
}
})
return _arr
};
const _arr = [9, 9, 9]
const _arr2 = plusOne(_arr)
console.log('输出:', _arr2)
结果展示:
出错了。。。
终极代码:
/**
* @param {number[]} digits
* @return {number[]}
*/
const plusOne = (arr) => {
for (let i = arr.length - 1; i >= 0; i--) {
if (arr[i] !== 9) {
arr[i]++
return arr
} else {
arr[i] = 0
}
}
arr = [1, ...arr]
return arr
}
const _arr = [9, 9, 9]
const _arr2 = plusOne(_arr)
console.log('输出:', _arr2)