
简单给定一个由 整数 组成的 非空 数组所表示的非负整数,在该数的基础上加一。
最高位数字存放在数组的首位, 数组中每个元素只存储单个数字。
你可以假设除了整数 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;// 当末尾不为9if (digits[l - 1] !== 9) {digits[l - 1] += 1;return digits;}// 当末尾为9let index;for (let i = l - 1; i >= 0; i--) {if (digits[i] !== 9) {index = i;break;}}// digits内全部数字均为9if (index === undefined) {return [1, ...digits.fill(0)];}// digits内并非所有数字都为9digits[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;
