Fork me on GitHub

LeetCode-066-加一

题目描述

给定一个非负整数组成的非空数组,在该数的基础上加一,返回一个新的数组。

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

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

示例

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

思路

分两种情况考虑:

  • 如果全为9的话就数组长度加一,再加一
  • 如果不全为9,如果末尾等于9,那就往前寻找第一个不为9的数,将其加一,后面置0 ,如果末尾不等于9,那就直接加一

解答

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
public int[] plusOne(int[] digits) {
int len = digits.length;
boolean flag = true;
for (int i=len-1;i>=0;i--){
if (digits[i] != 9){
flag = false;
break;
}
}
if (flag){
int[] result = new int[++len];
for (int i=1;i<len;i++){
result[i] = 0;
}
result[0] =1;
return result;
}else {
if (digits[len-1] == 9){
int i=len-1;
while (digits[i] == 9){
i--;
}
digits[i]++;
for (int j=i+1;j<len;j++){
digits[j] =0;
}
}else {
digits[len-1]++;
}
}
return digits;
}