这是我参与2022首次更文挑战的第22天,活动详情查看:2022首次更文挑战
前言
- 有人相爱,有人夜里开车看海,有人
leetcode第一题都做不出来,由此可见,leetcode的题还是有分量的。今天我们就来会会它们
题目地址
题目介绍
给定一个由 整数 组成的 非空 数组所表示的非负整数,在该数的基础上加一。
最高位数字存放在数组的首位, 数组中每个元素只存储单个数字。
你可以假设除了整数 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
数学
思路
- 数字加法应该从最后一个开始,所以需要倒循环数组
digits - 如果当前循环值
等于9,那么就把当前值设为0,进位为1 - 如果当前循环值
不等于9,那么当前值执行+1操作,进位设为0 - 循环完成,如果进位依旧是
1,那么就证明它属于999、9999,99999类似的数了 - 那么就需要通过数组的
unshift方法,给数组顶部添加数字1 - 返回数组即可
解法
/**
* @param {number[]} digits
* @return {number[]}
*/
var plusOne = function (digits) {
// 创建临时变量carry,表示进位 1表示进位, 0 表示不进位, 默认表示进位
let carry = 1
// 倒循环数组
for (let i = digits.length - 1; i >= 0; i--) {
// 如果当前项等于9,并且有进位,
// 那么就把当前值设为0,同时进位设为1
if (digits[i] === 9) {
if (carry === 1) {
digits[i] = 0
carry = 1
}
} else {
// 否则
// 当前项直接加等于carry
// 同时进位carry设为0
digits[i]+=carry
carry = 0
}
}
if (carry === 1) {
digits.unshift(1)
}
return digits
};
写在最后
- 希望你能收获满满