LeetCodeAnimation/notes/LeetCode第66号问题:加一.md
程序员吴师兄 5dee53d957 更换图片地址
2019-11-14 11:00:28 +08:00

91 lines
2.5 KiB
Java
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# LeetCode 66 号问题加一
> 本文首发于公众号五分钟学算法[图解 LeetCode ](<https://github.com/MisterBooo/LeetCodeAnimation>)系列文章之一。
>
> 个人网站[https://www.cxyxiaowu.com](https://www.cxyxiaowu.com)
今天分享的题目来源于 LeetCode 上第 66 号问题加一题目难度为 Easy目前通过率为 39.0%
### 题目描述
给定一个由**整数**组成的**非空**数组所表示的非负整数在该数的基础上加一
最高位数字存放在数组的首位 数组中每个元素只存储一个数字
你可以假设除了整数 0 之外这个整数不会以零开头
**示例 1:**
```
输入: [1,2,3]
输出: [1,2,4]
解释: 输入数组表示数字 123
```
**示例 2:**
```
输入: [4,3,2,1]
输出: [4,3,2,2]
解释: 输入数组表示数字 4321
```
**示例 3:**
```
//为了更好理解题意,根据 LeetCode 评论区评论新增一个示例
输入: [9,9]
输出: [100]
解释: 输入数组表示数字 100
```
### 题目解析
本题很简单题目意思也很好理解注意的点就是 **进位问题**
* 如果数组末位个位小于 9 直接个位加 1 返回即可
* 如果数组末位个位等于 9将该位个位设置为 0 并且产生了进位接下来观察前一位十位
* * 如果前一位十位小于 9 直接十位加 1 返回即可
* 如果前一位十位等于 9将该位十位设置为 0 并且产生了进位接下来观察前一位百位
* 以此类推最后观察运算完的第一位是否为 0 如果为 0 则在最前面加 1 **示例 3**
### 动画描述
![](https://blog-1257126549.cos.ap-guangzhou.myqcloud.com/blog/iejo0.gif)
![](https://blog-1257126549.cos.ap-guangzhou.myqcloud.com/blog/15na7.gif)
### 代码实现
```java
public class Solution {
public int[] plusOne(int[] digits) {
int n = digits.length;
//从数组末尾开始向前遍历
for (int i = digits.length - 1; i >= 0; --i) {
if (digits[i] < 9) {
digits[i]++;
//没有进位,直接返回
return digits;
}
//产生进位,需要将该位赋值为 0
digits[i] = 0;
}
//整体产生了进位,数组长度需要变化加 1
int[] res = new int[n + 1];
res[0] = 1;
return res;
}
}
```
![](https://blog-1257126549.cos.ap-guangzhou.myqcloud.com/blog/r5cpx.png)