Offer 驾到,掘友接招!我正在参与2022春招系列活动-刷题打卡任务,点击查看活动详情。
题目
给定一个由 整数 组成的 非空 数组所表示的非负整数,在该数的基础上加一。
最高位数字存放在数组的首位, 数组中每个元素只存储单个数字。
你可以假设除了整数 0 之外,这个整数不会以零开头。
来源:力扣(LeetCode)
链接:leetcode-cn.com/problems/pl…
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
示例 1:
输入:digits = [1,2,3]
输出:[1,2,4]
解释:输入数组表示数字 123。
示例 2:
输入:digits = [4,3,2,1]
输出:[4,3,2,2]
解释:输入数组表示数字 4321。
示例 3:
输入:digits = [0]
输出:[1]
思路分析
- 首先考虑情况 第一种是常规数据没有9 => [0, 1, 3, 4], 第二种是非常规数据 => [1,2,9] [9,9,9]
第一种 常规数据
- 首先循环是从后向前循环
- 判断是否存在9,如果不存在,就是直接最后一位+1 return
第二种 有9分两种情况,部分是9,还有全部是9
-
有多位9,但不全是9的情况
-
依次倒叙判断哪个下标值不会9, 拿到下标值后
-
从该下标值得下一位开始,全部替换为0
-
全部是9的情况,那就长度加1, 把所有值都替换为0,第一位进一
代码
let plusOne = function(digits) {
/**
* 首先考虑情况,第一种是常规数据没有9 => [0, 1, 3, 4],
* 第二种是非常规数据 => [1,2,9] [9,9,9]
*
* 第一种,首先循环是从后向前循环
* 判断是否存在9,如果不存在,就是直接最后一位+1 return
*
* 第二种 有9分两种情况,部分是9,还有全部是9
* 有多位9,但不全是9的情况
* 依次倒叙判断哪个下标值不会9, 拿到下标值后
* 从该下标值得下一位开始,全部替换为0
*
* 全部是9的情况,那就长度加1, 把所有值都替换为0,第一位进一
* */
const len = digits.length;
for (let i = len - 1; i >= 0; --i) {
if (digits[i] !== 9) {
++digits[i];
for (let j = i + 1; j < len; ++j) {
digits[j] = 0;
}
return digits;
}
}
let newArr = new Array(len + 1).fill(0);
newArr[0] = 1
return newArr;
}