8000 add 066 · AthleticCorgi/leetcode@425f188 · GitHub
[go: up one dir, main page]

Skip to content

Commit 425f188

Browse files
committed
add 066
1 parent bc20861 commit 425f188

File tree

1 file changed

+55
-0
lines changed

1 file changed

+55
-0
lines changed

problems/066. Plus One/README.md

Lines changed: 55 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,55 @@
1+
# 66. Plus One
2+
3+
## #1 翻转数组+进位相加[AC]
4+
5+
### 思路
6+
7+
该题用数组这种结构来表示整数,整数的最低位是反而是数组下标的最高位`length-1`,整数的最高位是数组下标的最低位`0`。这样处理起来可能会比较麻烦,我们可以先对数组进行翻转,使得数组的低位对应整数表示的低位,数组的高位对应整数表示的高位,然后进行进位相加。最后,在返回结果前,对结果数组进行翻转。
8+
9+
### 算法
10+
11+
```java
12+
class Solution {
13+
public int[] plusOne(int[] digits) {
14+
if(digits == null || digits.length == 0)
15+
return new int[0];
16+
// first bit
17+
reverse(digits);
18+
int sum = digits[0] + 1;
19+
digits[0] = sum % 10;
20+
int carry = sum / 10;
21+
for(int i=1; i<digits.length; i++){
22+
if(carry == 0)
23+
break;
24+
sum = digits[i] + carry;
25+
digits[i] = sum % 10;
26+
carry = sum / 10;
27+
}
28+
if(carry == 0){
29+
reverse(digits);
30+
return digits;
31+
}
32+
int[] res = new int[digits.length + 1];
33+
for(int i=0; i<digits.length; i++)
34+
res[i] = digits[i];
35+
res[digits.length] = carry;
36+
reverse(res);
37+
return res;
38+
}
39+
40+
public void reverse(int[] nums){
41+
for(int i=0,j=nums.length-1; i<j; i++,j--){
42+
int temp = nums[i];
43+
nums[i] = nums[j];
44+
nums[j] = temp;
45+
}
46+
47+
}
48+
}
49+
```
50+
51+
### 复杂度分析:
52+
53+
- 时间复杂度:$O(n)$
54+
- 空间复杂度:$O(1)$
55+

0 commit comments

Comments
 (0)
0