持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第6天,点击查看活动详情
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]
「示例4:」
输入:digits = [7,6,5,4]
输出:[7,6,5,5]
解释:输入数组表示数字 7655。
「示例5:」
输入:digits = [18,17,16,15,14,13]
输出:[18,17,16,15,14,14]
解释:输入数组表示数字 18 17 16 15 14 14。
「示例6:」
输入:digits = [51,52,53,54,55,56,57]
输出:[51,52,53,54,55,56,58]
解释:输入数组表示数字 51 52 53 54 55 56 58。
「示例6:」
输入:digits = [68,67,66,65,64,63,62,61]
输出:[68,67,66,65,64,63,62,62]
解释:输入数组表示数字 68 67 66 65 64 63 62 62。
「提示:」
1. 1 <= digits.length <= 100
2. 0 <= digits[i] <= 9
解题思路
1. 末位无进位,则末位加一即可,因为末位无进位,前面也不可能产生进位,例如 48 => 49
2. 末位有进位,在中间位置进位停止,则需要找到进位的典型标志,即为当前位 %10后为 0,则前一位加 1,直到不为 0 为止,比如 499 => 500
3. 末位有进位,并且一直进位到最前方导致结果多出一位,对于这种情况,需要在第 2 种情况遍历结束的基础上,进行单独处理,比如 999 => 1000
代码实现
/**
* @param {number[]} digits
* @return {number[]}
*/
var plusOne = function(digits) {
const len = digits.length;
for(let i = len - 1; i >= 0; i--) {
digits[i]++;
digits[i] %= 10;
if(digits[i]!=0)
return digits;
}
digits = [...Array(len + 1)].map(_=>0);;
digits[0] = 1;
return digits;
};
如果你对这道题目还有疑问的话,可以在评论区进行留言;