简单给定一个由 整数 组成的 非空 数组所表示的非负整数,在该数的基础上加一。
最高位数字存放在数组的首位, 数组中每个元素只存储单个数字。
你可以假设除了整数 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]
作者:力扣 (LeetCode)
链接:https://leetcode-cn.com/leetbook/read/top-interview-questions-easy/x2cv1c/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
代码
/**
* @param {number[]} digits
* @return {number[]}
*/
var plusOne = function (digits) {
if (digits === [0]) {
return [1];
}
const l = digits.length;
// 当末尾不为9
if (digits[l - 1] !== 9) {
digits[l - 1] += 1;
return digits;
}
// 当末尾为9
let index;
for (let i = l - 1; i >= 0; i--) {
if (digits[i] !== 9) {
index = i;
break;
}
}
// digits内全部数字均为9
if (index === undefined) {
return [1, ...digits.fill(0)];
}
// digits内并非所有数字都为9
digits[index] += 1;
digits.fill(0, index + 1, l);
return digits;
};
思路
本题不难,只要分开情况讨论即可:
- digits内只含0 ——> [0]
- digits最后一位不为9 ——> 直接将最后一位+1并返回即可
- digits最后一位为9:
3.1 digits内的数字全都为9 ——> digits数组长度+1,并且第一位数值为1,其余皆为0;
3.2 digits内含有除9外的其他数字 ——> 倒序digits找到第一个不为9的数字+1,并将该数字后的所有数字变 为0;