携手创作,共同成长!这是我参与「掘金日新计划 · 8 月更文挑战」的第31天,点击查看活动详情
66. 加一
给定一个由 整数 组成的 非空 数组所表示的非负整数,在该数的基础上加一。
最高位数字存放在数组的首位, 数组中每个元素只存储单个数字。
你可以假设除了整数 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 <= 100
0 <= digits[i] <= 9
解题思路
// 第一种
首先对数组最后一位加一
循环遍历,从个位开始,即数组最后一位
如果它为10,将它变为0,它的上一个下标的数加一,以此类推
当进行到第一位时,如果它为10,同样将它变为0,只不过它没有上一个下标的数,这时候使用unshift()方法在头部插入一个数1
// 第二种
根据官方实例可以看出,其实就是把数组看成数字,然后把加1的结果作为数组在返回,数组中每个元素只存储单个数字。
提示:0 <= digits[i] <= 9,说明数组中的元素是 0 - 9 之间。
那么我们只需要从后往前循环数组,让数组的最后一位加1,如果后一位是9则表示进1,把当前 digits[i] 设为 0,继续下次循环,直到当前循环的元素不为9。若数组的所有元素均为9,则把数组的长度变为 length + 1,第一位为1,其余则为0。
代码实现
// 第一种
var plusOne = function(digits) {
var length = digits.length;
digits[length - 1] = digits[length - 1] + 1;
for(var i = length - 1;i >= 0;i --){
if(digits[i] == 10){
digits[i] = 0;
if(i != 0){
digits[i - 1] = digits[i - 1] + 1;
}
else{
digits.unshift(1);
}
}
}
return digits;
};
// 第二种
function plusOne(digits) {
const len = digits.length
for (let i = len - 1; i >= 0; i--) {
if (digits[i] != 9) {
++digits[i]
return digits
}
digits[i] = 0
}
// 如果跳出循环,说明数组中的元素全部为9
const result = new Array(len + 1).fill(0)
result[0] = 1
return result
}
如果你对这道题目还有疑问的话,可以在评论区进行留言;