给定一个由 整数 组成的 非空 数组所表示的非负整数,在该数的基础上加一。
最高位数字存放在数组的首位, 数组中每个元素只存储单个数字。
你可以假设除了整数 0 之外,这个整数不会以零开头。
示例 1:
输入:digits = [1,2,3]
输出:[1,2,4]
解释:输入数组表示数字 123。
// 1、最后一位小于9,直接加1返回
// 2、最后一位大于9,第一位小于9,不需进位。第一位大于9,需要进位
var plusOne = function(digits) {
let first = digits[0]
if(digits[digits.length-1]<9){//如果最后一个值小于9,直接加一返回数组
digits[digits.length-1]+=1
//console.log('digits0 '+digits)
return digits
}else{
for(let i=digits.length-1;i>=0;i--){
if(digits[i]==9){ //需要进一
digits[i]=0
if(i==0&&first==9){//直到首位为9
digits.unshift(1)
//console.log('digits2 '+digits)
return digits
}
}else{ //不需进一
digits[i]+=1
//console.log('digits1 '+digits)
return digits
}
}
}
};
//初始化一个状态nextType,为true则循环元素是加1,为false则跳出循环直接返回值。
//如果当前元素加1后大于9则carry为true,再把当前元素的余数赋给当前元素,
//循环结束后,若nextType为true则,向数组digits前进位1
var plusOne = function(digits) {
let nextType = true //初始化一个状态
for(let i=digits.length-1;i>=0;i--){ //遍历数组
if(nextType){//如果状态为true
digits[i]++ //元素加一
nextType = digits[i]>9
//重置nextType状态, 如果当前元素大于9则nextType为true下一个元素可加一,反之不加一
digits[i] = digits[i]%10//当前元素取余
}else{//如果状态为false直接返回
console.log(digits)
return digits
}
}
if(nextType){//如果遍历结束后首位大于9,则数组首部添加一个元素1
digits.unshift(1)
}
console.log(digits)
return digits
}
plusOne([1,2,3])