LeetCode66-加一

题目链接

英文链接:https://leetcode.com/problems/plus-one/

中文链接:https://leetcode-cn.com/problems/plus-one/

题目详述

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

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

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

示例 1:

1
2
3
输入: [1,2,3]
输出: [1,2,4]
解释: 输入数组表示数字 123。

示例 2:

1
2
3
输入: [4,3,2,1]
输出: [4,3,2,2]
解释: 输入数组表示数字 4321。

题目详解

这题比较简单,只是要注意判断数组的每个元素是否都为 9。

  • 若数组的每个元素均为 9,因为进位,返回的数组比原数组多一个元素。如 [9,9,9] 返回 [1,0,0,0]。
  • 若数组中存在元素不为 9,只需要加一即可,返回的数组与原数组具有同样的多的元素。在遍历过程中,如果不产生进位就可以直接返回。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
public class LeetCode_00066 {

public int[] plusOne(int[] digits) {
int n = digits.length;
for (int i = n - 1; i >= 0; --i) {
// 这一位小于 9 时,加上 1 之后就可以直接返回,因为不用进位
if (digits[i] < 9) {
++digits[i];
return digits;
}
// 这一位为 9,加上 1 变为 10,进位后为 0
digits[i] = 0;
}
// 数组的每个元素都为 9
int[] ret = new int[n + 1];
ret[0] = 1;
return ret;
}
}