LC 66. 加一

题目描述

这是 LeetCode 上的 66. 加一 ,难度为 简单

给定一个由 整数 组成的 非空 数组所表示的非负整数,在该数的基础上加一。

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

你可以假设除了整数 0 之外,这个整数不会以零开头。

示例 1:

1
2
3
4
5
输入:digits = [1,2,3]

输出:[1,2,4]

解释:输入数组表示数字 123。

示例 2:
1
2
3
4
5
输入:digits = [4,3,2,1]

输出:[4,3,2,2]

解释:输入数组表示数字 4321

示例 3:

1
2
3
输入:digits = [0]

输出:[1]

提示:

  • 1 <= digits.length <= 100
  • 0 <= digits[i] <= 9

模拟

这是 2. 两数相加 的简化版,其中一个操作固定为 $1$。

只需要按照题目进行模拟即可,使用 $t$ 记录进位。

代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
class Solution {
public int[] plusOne(int[] digits) {
int n = digits.length;
digits[n - 1]++;
List<Integer> list = new ArrayList<>();
for (int i = n - 1, t = 0; i >= 0 || t != 0; i--) {
int x = i >= 0 ? digits[i] + t : t;
list.add(x % 10);
t = x / 10;
}
Collections.reverse(list);
int[] ans = new int[list.size()];
for (int i = 0; i < list.size(); i++) ans[i] = list.get(i);
return ans;
}
}

  • 时间复杂度:$O(n)$
  • 空间复杂度:$O(n)$

最后

这是我们「刷穿 LeetCode」系列文章的第 No.66 篇,系列开始于 2021/01/01,截止于起始日 LeetCode 上共有 1916 道题目,部分是有锁题,我们将先把所有不带锁的题目刷完。

在这个系列文章里面,除了讲解解题思路以外,还会尽可能给出最为简洁的代码。如果涉及通解还会相应的代码模板。

为了方便各位同学能够电脑上进行调试和提交代码,我建立了相关的仓库:https://github.com/SharingSource/LogicStack-LeetCode

在仓库地址里,你可以看到系列文章的题解链接、系列文章的相应代码、LeetCode 原题链接和其他优选题解。


本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!