joshua-aragon-EaB4Ml7C7fE-unsplash.jpg
简单给定一个由 整数 组成的 非空 数组所表示的非负整数,在该数的基础上加一。

最高位数字存放在数组的首位, 数组中每个元素只存储单个数字。

你可以假设除了整数 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)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

代码

  1. /**
  2. * @param {number[]} digits
  3. * @return {number[]}
  4. */
  5. var plusOne = function (digits) {
  6. if (digits === [0]) {
  7. return [1];
  8. }
  9. const l = digits.length;
  10. // 当末尾不为9
  11. if (digits[l - 1] !== 9) {
  12. digits[l - 1] += 1;
  13. return digits;
  14. }
  15. // 当末尾为9
  16. let index;
  17. for (let i = l - 1; i >= 0; i--) {
  18. if (digits[i] !== 9) {
  19. index = i;
  20. break;
  21. }
  22. }
  23. // digits内全部数字均为9
  24. if (index === undefined) {
  25. return [1, ...digits.fill(0)];
  26. }
  27. // digits内并非所有数字都为9
  28. digits[index] += 1;
  29. digits.fill(0, index + 1, l);
  30. return digits;
  31. };

思路

本题不难,只要分开情况讨论即可:

  1. digits内只含0 ——> [0]
  2. digits最后一位不为9 ——> 直接将最后一位+1并返回即可
  3. digits最后一位为9:

3.1 digits内的数字全都为9 ——> digits数组长度+1,并且第一位数值为1,其余皆为0;
3.2 digits内含有除9外的其他数字 ——> 倒序digits找到第一个不为9的数字+1,并将该数字后的所有数字变 为0;