Skip to content

Commit 832a5a3

Browse files
committed
feat: update solutions to lc problems
* No.0415.Add Strings * No.0989.Add to Array-Form of Integer
1 parent 898db48 commit 832a5a3

File tree

15 files changed

+230
-139
lines changed

15 files changed

+230
-139
lines changed

README.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,7 @@
3939
- [找到需要补充粉笔的学生编号](/solution/1800-1899/1894.Find%20the%20Student%20that%20Will%20Replace%20the%20Chalk/README.md) - 二分查找
4040
- [可移除字符的最大数目](/solution/1800-1899/1898.Maximum%20Number%20of%20Removable%20Characters/README.md) - 二分查找
4141
- [排序数组](/solution/0900-0999/0912.Sort%20an%20Array/README.md) - 快速排序、归并排序
42+
- [字符串相加](/solution/0400-0499/0415.Add%20Strings/README.md) - 高精度加法
4243
<!-- 排序算法、待补充 -->
4344

4445
### 2. 搜索

README_EN.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,7 @@ Complete solutions to [LeetCode](https://leetcode.com/problemset/all/), [LCOF](h
3838
- [Find the Student that Will Replace the Chalk](/solution/1800-1899/1894.Find%20the%20Student%20that%20Will%20Replace%20the%20Chalk/README_EN.md) - Binary search
3939
- [Maximum Number of Removable Characters](/solution/1800-1899/1898.Maximum%20Number%20of%20Removable%20Characters/README_EN.md) - Binary search
4040
- [Sort an Array](/solution/0900-0999/0912.Sort%20an%20Array/README_EN.md) - Quick Sort, Merge Sort
41+
- [Add Strings](/solution/0400-0499/0415.Add%20Strings/README_EN.md) - Addition of large numbers
4142

4243
### 2. Search
4344

solution/0400-0499/0415.Add Strings/README.md

Lines changed: 18 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -58,13 +58,12 @@
5858
```python
5959
class Solution:
6060
def addStrings(self, num1: str, num2: str) -> str:
61+
i, j, carry = len(num1) - 1, len(num2) - 1, 0
6162
ans = []
62-
i, j = len(num1) - 1, len(num2) - 1
63-
carry = 0
6463
while i >= 0 or j >= 0 or carry:
6564
carry += (0 if i < 0 else int(num1[i])) + (0 if j < 0 else int(num2[j]))
66-
ans.append(str(carry % 10))
67-
carry //= 10
65+
carry, v = divmod(carry, 10)
66+
ans.append(str(v))
6867
i, j = i - 1, j - 1
6968
return ''.join(ans[::-1])
7069
```
@@ -76,11 +75,10 @@ class Solution:
7675
```java
7776
class Solution {
7877
public String addStrings(String num1, String num2) {
79-
int i = num1.length() - 1, j = num2.length() - 1;
80-
int carry = 0;
8178
StringBuilder ans = new StringBuilder();
82-
while (i >= 0 || j >= 0 || carry > 0) {
83-
carry += (i < 0 ? 0 : num1.charAt(i--) - '0') + (j < 0 ? 0 : num2.charAt(j--) - '0');
79+
int i = num1.length() - 1, j = num2.length() - 1, carry = 0;
80+
for (; i >= 0 || j >= 0 || carry > 0; --i, --j) {
81+
carry += (i < 0 ? 0 : num1.charAt(i) - '0') + (j < 0 ? 0 : num2.charAt(j) - '0');
8482
ans.append(carry % 10);
8583
carry /= 10;
8684
}
@@ -99,18 +97,14 @@ class Solution {
9997
*/
10098
var addStrings = function (num1, num2) {
10199
let ans = [];
102-
for (
103-
let i = num1.length - 1, j = num2.length - 1, sum = 0;
104-
i >= 0 || j >= 0 || sum > 0;
105-
i--, j--
106-
) {
107-
const a = i >= 0 ? parseInt(num1.charAt(i), 10) : 0;
108-
const b = j >= 0 ? parseInt(num2.charAt(j), 10) : 0;
109-
sum += a + b;
110-
ans.unshift(sum % 10);
111-
sum = Math.floor(sum / 10);
100+
let [i, j, carry] = [num1.length - 1, num2.length - 1, 0];
101+
for (; i >= 0 || j >= 0 || carry; --i, --j) {
102+
carry += i < 0 ? 0 : parseInt(num1.charAt(i), 10);
103+
carry += j < 0 ? 0 : parseInt(num2.charAt(j), 10);
104+
ans.push(carry % 10);
105+
carry = Math.floor(carry / 10);
112106
}
113-
return ans.join('');
107+
return ans.reverse().join('');
114108
};
115109
```
116110

@@ -120,12 +114,11 @@ var addStrings = function (num1, num2) {
120114
class Solution {
121115
public:
122116
string addStrings(string num1, string num2) {
123-
int i = num1.size() - 1, j = num2.size() - 1;
124-
int carry = 0;
125117
string ans;
126-
while (i >= 0 || j >= 0 || carry)
118+
int i = num1.size() - 1, j = num2.size() - 1, carry = 0;
119+
for (; i >= 0 || j >= 0 || carry; --i, --j)
127120
{
128-
carry += (i < 0 ? 0 : num1[i--] - '0') + (j < 0 ? 0 : num2[j--] - '0');
121+
carry += (i < 0 ? 0 : num1[i] - '0') + (j < 0 ? 0 : num2[j] - '0');
129122
ans += to_string(carry % 10);
130123
carry /= 10;
131124
}
@@ -139,9 +132,9 @@ public:
139132
140133
```go
141134
func addStrings(num1 string, num2 string) string {
142-
carry := 0
143135
ans := ""
144-
for i, j := len(num1)-1, len(num2)-1; i >= 0 || j >= 0 || carry != 0; i, j = i-1, j-1 {
136+
i, j, carry := len(num1)-1, len(num2)-1, 0
137+
for ; i >= 0 || j >= 0 || carry != 0; i, j = i-1, j-1 {
145138
if i >= 0 {
146139
carry += int(num1[i] - '0')
147140
}

solution/0400-0499/0415.Add Strings/README_EN.md

Lines changed: 18 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -48,13 +48,12 @@
4848
```python
4949
class Solution:
5050
def addStrings(self, num1: str, num2: str) -> str:
51+
i, j, carry = len(num1) - 1, len(num2) - 1, 0
5152
ans = []
52-
i, j = len(num1) - 1, len(num2) - 1
53-
carry = 0
5453
while i >= 0 or j >= 0 or carry:
5554
carry += (0 if i < 0 else int(num1[i])) + (0 if j < 0 else int(num2[j]))
56-
ans.append(str(carry % 10))
57-
carry //= 10
55+
carry, v = divmod(carry, 10)
56+
ans.append(str(v))
5857
i, j = i - 1, j - 1
5958
return ''.join(ans[::-1])
6059
```
@@ -64,11 +63,10 @@ class Solution:
6463
```java
6564
class Solution {
6665
public String addStrings(String num1, String num2) {
67-
int i = num1.length() - 1, j = num2.length() - 1;
68-
int carry = 0;
6966
StringBuilder ans = new StringBuilder();
70-
while (i >= 0 || j >= 0 || carry > 0) {
71-
carry += (i < 0 ? 0 : num1.charAt(i--) - '0') + (j < 0 ? 0 : num2.charAt(j--) - '0');
67+
int i = num1.length() - 1, j = num2.length() - 1, carry = 0;
68+
for (; i >= 0 || j >= 0 || carry > 0; --i, --j) {
69+
carry += (i < 0 ? 0 : num1.charAt(i) - '0') + (j < 0 ? 0 : num2.charAt(j) - '0');
7270
ans.append(carry % 10);
7371
carry /= 10;
7472
}
@@ -87,18 +85,14 @@ class Solution {
8785
*/
8886
var addStrings = function (num1, num2) {
8987
let ans = [];
90-
for (
91-
let i = num1.length - 1, j = num2.length - 1, sum = 0;
92-
i >= 0 || j >= 0 || sum > 0;
93-
i--, j--
94-
) {
95-
const a = i >= 0 ? parseInt(num1.charAt(i), 10) : 0;
96-
const b = j >= 0 ? parseInt(num2.charAt(j), 10) : 0;
97-
sum += a + b;
98-
ans.unshift(sum % 10);
99-
sum = Math.floor(sum / 10);
88+
let [i, j, carry] = [num1.length - 1, num2.length - 1, 0];
89+
for (; i >= 0 || j >= 0 || carry; --i, --j) {
90+
carry += i < 0 ? 0 : parseInt(num1.charAt(i), 10);
91+
carry += j < 0 ? 0 : parseInt(num2.charAt(j), 10);
92+
ans.push(carry % 10);
93+
carry = Math.floor(carry / 10);
10094
}
101-
return ans.join('');
95+
return ans.reverse().join('');
10296
};
10397
```
10498

@@ -108,12 +102,11 @@ var addStrings = function (num1, num2) {
108102
class Solution {
109103
public:
110104
string addStrings(string num1, string num2) {
111-
int i = num1.size() - 1, j = num2.size() - 1;
112-
int carry = 0;
113105
string ans;
114-
while (i >= 0 || j >= 0 || carry)
106+
int i = num1.size() - 1, j = num2.size() - 1, carry = 0;
107+
for (; i >= 0 || j >= 0 || carry; --i, --j)
115108
{
116-
carry += (i < 0 ? 0 : num1[i--] - '0') + (j < 0 ? 0 : num2[j--] - '0');
109+
carry += (i < 0 ? 0 : num1[i] - '0') + (j < 0 ? 0 : num2[j] - '0');
117110
ans += to_string(carry % 10);
118111
carry /= 10;
119112
}
@@ -127,9 +120,9 @@ public:
127120
128121
```go
129122
func addStrings(num1 string, num2 string) string {
130-
carry := 0
131123
ans := ""
132-
for i, j := len(num1)-1, len(num2)-1; i >= 0 || j >= 0 || carry != 0; i, j = i-1, j-1 {
124+
i, j, carry := len(num1)-1, len(num2)-1, 0
125+
for ; i >= 0 || j >= 0 || carry != 0; i, j = i-1, j-1 {
133126
if i >= 0 {
134127
carry += int(num1[i] - '0')
135128
}

solution/0400-0499/0415.Add Strings/Solution.cpp

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,11 @@
11
class Solution {
22
public:
33
string addStrings(string num1, string num2) {
4-
int i = num1.size() - 1, j = num2.size() - 1;
5-
int carry = 0;
64
string ans;
7-
while (i >= 0 || j >= 0 || carry)
5+
int i = num1.size() - 1, j = num2.size() - 1, carry = 0;
6+
for (; i >= 0 || j >= 0 || carry; --i, --j)
87
{
9-
carry += (i < 0 ? 0 : num1[i--] - '0') + (j < 0 ? 0 : num2[j--] - '0');
8+
carry += (i < 0 ? 0 : num1[i] - '0') + (j < 0 ? 0 : num2[j] - '0');
109
ans += to_string(carry % 10);
1110
carry /= 10;
1211
}

solution/0400-0499/0415.Add Strings/Solution.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
func addStrings(num1 string, num2 string) string {
2-
carry := 0
32
ans := ""
4-
for i, j := len(num1)-1, len(num2)-1; i >= 0 || j >= 0 || carry != 0; i, j = i-1, j-1 {
3+
i, j, carry := len(num1)-1, len(num2)-1, 0
4+
for ; i >= 0 || j >= 0 || carry != 0; i, j = i-1, j-1 {
55
if i >= 0 {
66
carry += int(num1[i] - '0')
77
}

solution/0400-0499/0415.Add Strings/Solution.java

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,9 @@
11
class Solution {
22
public String addStrings(String num1, String num2) {
3-
int i = num1.length() - 1, j = num2.length() - 1;
4-
int carry = 0;
53
StringBuilder ans = new StringBuilder();
6-
while (i >= 0 || j >= 0 || carry > 0) {
7-
carry += (i < 0 ? 0 : num1.charAt(i--) - '0') + (j < 0 ? 0 : num2.charAt(j--) - '0');
4+
int i = num1.length() - 1, j = num2.length() - 1, carry = 0;
5+
for (; i >= 0 || j >= 0 || carry > 0; --i, --j) {
6+
carry += (i < 0 ? 0 : num1.charAt(i) - '0') + (j < 0 ? 0 : num2.charAt(j) - '0');
87
ans.append(carry % 10);
98
carry /= 10;
109
}

solution/0400-0499/0415.Add Strings/Solution.js

Lines changed: 7 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -5,16 +5,12 @@
55
*/
66
var addStrings = function (num1, num2) {
77
let ans = [];
8-
for (
9-
let i = num1.length - 1, j = num2.length - 1, sum = 0;
10-
i >= 0 || j >= 0 || sum > 0;
11-
i--, j--
12-
) {
13-
const a = i >= 0 ? parseInt(num1.charAt(i), 10) : 0;
14-
const b = j >= 0 ? parseInt(num2.charAt(j), 10) : 0;
15-
sum += a + b;
16-
ans.unshift(sum % 10);
17-
sum = Math.floor(sum / 10);
8+
let [i, j, carry] = [num1.length - 1, num2.length - 1, 0];
9+
for (; i >= 0 || j >= 0 || carry; --i, --j) {
10+
carry += i < 0 ? 0 : parseInt(num1.charAt(i), 10);
11+
carry += j < 0 ? 0 : parseInt(num2.charAt(j), 10);
12+
ans.push(carry % 10);
13+
carry = Math.floor(carry / 10);
1814
}
19-
return ans.join('');
15+
return ans.reverse().join('');
2016
};
Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,10 @@
11
class Solution:
22
def addStrings(self, num1: str, num2: str) -> str:
3+
i, j, carry = len(num1) - 1, len(num2) - 1, 0
34
ans = []
4-
i, j = len(num1) - 1, len(num2) - 1
5-
carry = 0
65
while i >= 0 or j >= 0 or carry:
76
carry += (0 if i < 0 else int(num1[i])) + (0 if j < 0 else int(num2[j]))
8-
ans.append(str(carry % 10))
9-
carry //= 10
7+
carry, v = divmod(carry, 10)
8+
ans.append(str(v))
109
i, j = i - 1, j - 1
1110
return ''.join(ans[::-1])

solution/0900-0999/0989.Add to Array-Form of Integer/README.md

Lines changed: 62 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -58,7 +58,7 @@
5858

5959
<!-- 这里可写通用的实现逻辑 -->
6060

61-
数组从尾到头遍历,分别与 `K` 中的每一位相加,进位保存在 `carry` 中,不进位和则添加到结果列表中。最后逆序结果列表即可。
61+
数组从尾到头遍历,分别与 `k` 中的每一位相加,进位保存在 `carry` 中,不进位和则添加到结果列表中。最后逆序结果列表即可。
6262

6363
<!-- tabs:start -->
6464

@@ -68,16 +68,16 @@
6868

6969
```python
7070
class Solution:
71-
def addToArrayForm(self, A: List[int], K: int) -> List[int]:
72-
n = len(A) - 1
73-
carry, res = 0, []
74-
while n >= 0 or K != 0 or carry != 0:
75-
carry += (0 if n < 0 else A[n]) + (K % 10)
76-
res.append(carry % 10)
77-
K //= 10
78-
carry //= 10
79-
n -= 1
80-
return res[::-1]
71+
def addToArrayForm(self, num: List[int], k: int) -> List[int]:
72+
i, carry = len(num) - 1, 0
73+
ans = []
74+
while i >= 0 or k or carry:
75+
carry += (0 if i < 0 else num[i]) + (k % 10)
76+
carry, v = divmod(carry, 10)
77+
ans.append(v)
78+
k //= 10
79+
i -= 1
80+
return ans[::-1]
8181
```
8282

8383
### **Java**
@@ -86,19 +86,16 @@ class Solution:
8686

8787
```java
8888
class Solution {
89-
public List<Integer> addToArrayForm(int[] A, int K) {
90-
int n = A.length - 1;
91-
List<Integer> res = new ArrayList<>();
92-
int carry = 0;
93-
while (n >= 0 || K != 0 || carry != 0) {
94-
carry += (n < 0 ? 0 : A[n]) + (K % 10);
95-
res.add(carry % 10);
96-
K /= 10;
89+
public List<Integer> addToArrayForm(int[] num, int k) {
90+
int i = num.length - 1, carry = 0;
91+
LinkedList<Integer> ans = new LinkedList<>();
92+
while (i >= 0 || k > 0 || carry > 0) {
93+
carry += (i < 0 ? 0 : num[i--]) + k % 10;
94+
ans.addFirst(carry % 10);
9795
carry /= 10;
98-
--n;
96+
k /= 10;
9997
}
100-
Collections.reverse(res);
101-
return res;
98+
return ans;
10299
}
103100
}
104101
```
@@ -161,6 +158,49 @@ impl Solution {
161158
}
162159
```
163160

161+
### **C++**
162+
163+
```cpp
164+
class Solution {
165+
public:
166+
vector<int> addToArrayForm(vector<int>& num, int k) {
167+
int i = num.size() - 1, carry = 0;
168+
vector<int> ans;
169+
for (; i >= 0 || k || carry; --i)
170+
{
171+
carry += (i < 0 ? 0 : num[i]) + k % 10;
172+
ans.push_back(carry % 10);
173+
carry /= 10;
174+
k /= 10;
175+
}
176+
reverse(ans.begin(), ans.end());
177+
return ans;
178+
}
179+
};
180+
```
181+
182+
### **Go**
183+
184+
```go
185+
func addToArrayForm(num []int, k int) []int {
186+
i, carry := len(num)-1, 0
187+
ans := []int{}
188+
for ; i >= 0 || k > 0 || carry > 0; i-- {
189+
if i >= 0 {
190+
carry += num[i]
191+
}
192+
carry += k % 10
193+
ans = append(ans, carry%10)
194+
carry /= 10
195+
k /= 10
196+
}
197+
for i, j := 0, len(ans)-1; i < j; i, j = i+1, j-1 {
198+
ans[i], ans[j] = ans[j], ans[i]
199+
}
200+
return ans
201+
}
202+
```
203+
164204
### **...**
165205

166206
```

0 commit comments

Comments
 (0)