初级算法(第七题)
小知识,大挑战!本文正在参与“程序员必备小知识”创作活动。
给定一个由 整数 组成的 非空 数组所表示的非负整数,在该数的基础上加一。最高位数字存放在数组的首位, 数组中每个元素只存储单个数字。你可以假设除了整数 0 之外,这个整数不会以零开头。
示例1:
输入: digits = [1,2,3]
输出: [1,2,4]
解释: 输入数组表示数字 123。
示例2:
输入: digits = [4,3,2,1]
输出: [4,3,2,2]
解释: 输入数组表示数字 4321。
示例3:
输入: digits = [0]
输出: [1]
提示
1 <= digits.length <= 1000 <= digits[i] <= 9
解题思路
- 首先题目的意思是输入的数组相当于一个数组,并且这个数字除了0以为不会有0开的证书比如
01 - 这样我们就可以遍历数组,从最后以为开始遍历。
- 最后开始每一位加1,如果当前位置加1之后小于10,我们就结束循环。返回数组
- 如果当前位置加1等于10了,我们就要把当前位置值赋值为0,然后继续循环,但是我们要让循环坐标大于0,坐标等于0的时候有其他判断
- 上一步说了坐标为0的时候有其他判断,没错就是再坐标为0的时候,我们要判断+1是否等于10,如果等于10的话就将0坐标赋值为0并且再数组第一位插入一个1,因为是10进位进来的。
话不多说上代码
/**
* @param {number[]} digits
* @return {number[]}
*/
var plusOne = function(digits) {
let length = digits.length;
for(let i = length-1;i>=0;i--){
if(digits[i] + 1 < 10){
digits[i] = digits[i] + 1;
break;
};
if(digits[i] + 1 == 10 && i>0){
digits[i] = 0
}
if(digits[i] + 1 == 10 && i == 0){
digits[i] = 0;
digits.unshift(1);
}
}
return digits;
};