Skip to content

Commit c65ee2f

Browse files
committed
feat: add solutions to lc problem: No.0043
No.0043.Multiply Strings
1 parent de24412 commit c65ee2f

File tree

5 files changed

+203
-58
lines changed

5 files changed

+203
-58
lines changed

solution/0000-0099/0043.Multiply Strings/README.md

+70-6
Original file line numberDiff line numberDiff line change
@@ -39,15 +39,79 @@
3939
<!-- 这里可写当前语言的特殊实现逻辑 -->
4040

4141
```python
42-
42+
class Solution:
43+
def multiply(self, num1: str, num2: str) -> str:
44+
def add(s1, s2):
45+
n1, n2 = len(s1), len(s2)
46+
i = carry = 0
47+
res = []
48+
while i < max(n1, n2) or carry > 0:
49+
a = int(s1[n1 - i - 1]) if i < n1 else 0
50+
b = int(s2[n2 - i - 1]) if i < n2 else 0
51+
carry, t = divmod(a + b + carry, 10)
52+
res.append(str(t))
53+
i += 1
54+
return ''.join(res[::-1])
55+
56+
if '0' in [num1, num2]:
57+
return '0'
58+
n1, n2 = len(num1), len(num2)
59+
ans = ''
60+
for i in range(n1):
61+
a = int(num1[n1 - i - 1])
62+
t = ''
63+
for j in range(n2):
64+
b = int(num2[n2 - j - 1])
65+
t = add(t, str(a * b) + '0' * j)
66+
ans = add(ans, t + '0' * i)
67+
return ans
4368
```
4469

4570
### **Java**
4671

4772
<!-- 这里可写当前语言的特殊实现逻辑 -->
4873

4974
```java
75+
class Solution {
76+
public String multiply(String num1, String num2) {
77+
if (Objects.equals(num1, "0") || Objects.equals(num2, "0")) {
78+
return "0";
79+
}
80+
int n1 = num1.length(), n2 = num2.length();
81+
String ans = "";
82+
for (int i = 0; i < n1; ++i) {
83+
int a = num1.charAt(n1 - i - 1) - '0';
84+
String t = "";
85+
for (int j = 0; j < n2; ++j) {
86+
int b = num2.charAt(n2 - j - 1) - '0';
87+
StringBuilder sb = new StringBuilder(String.valueOf(a * b));
88+
for (int k = 0; k < j; ++k) {
89+
sb.append(0);
90+
}
91+
t = add(t, sb.toString());
92+
}
93+
StringBuilder sb = new StringBuilder(t);
94+
for (int k = 0; k < i; ++k) {
95+
sb.append(0);
96+
}
97+
ans = add(ans, sb.toString());
98+
}
99+
return ans;
100+
}
50101

102+
private String add(String s1, String s2) {
103+
int n1 = s1.length(), n2 = s2.length();
104+
StringBuilder res = new StringBuilder();
105+
for (int i = 0, carry = 0; i < Math.max(n1, n2) || carry > 0; ++i) {
106+
int a = i < n1 ? (s1.charAt(n1 - i - 1) - '0') : 0;
107+
int b = i < n2 ? (s2.charAt(n2 - i - 1) - '0') : 0;
108+
int s = a + b + carry;
109+
carry = s / 10;
110+
res.append(s % 10);
111+
}
112+
return res.reverse().toString();
113+
}
114+
}
51115
```
52116

53117
### **TypeScript**
@@ -57,10 +121,10 @@ function multiply(num1: string, num2: string): string {
57121
if ([num1, num2].includes('0')) return '0';
58122
const n1 = num1.length, n2 = num2.length;
59123
let ans = '';
60-
for(let i = 0; i < n1; i++) {
124+
for (let i = 0; i < n1; i++) {
61125
let cur1 = parseInt(num1.charAt(n1 - i - 1), 10);
62126
let sum = '';
63-
for(let j = 0; j < n2; j++) {
127+
for (let j = 0; j < n2; j++) {
64128
let cur2 = parseInt(num2.charAt(n2 - j - 1), 10);
65129
sum = addString(sum, cur1 * cur2 + ('0'.repeat(j)));
66130
}
@@ -74,14 +138,14 @@ function addString(s1: string, s2: string): string {
74138
let ans = [];
75139
let sum = 0;
76140
for (let i = 0; i < n1 || i < n2 || sum > 0; i++) {
77-
let num1 = s1.charAt(i) ? parseInt(s1.charAt(i), 10) : 0;
78-
let num2 = s2.charAt(i) ? parseInt(s2.charAt(i), 10) : 0;
141+
let num1 = i < n1 ? parseInt(s1.charAt(n1 - i - 1), 10) : 0;
142+
let num2 = i < n2 ? parseInt(s2.charAt(n2 - i - 1), 10) : 0;
79143
sum += (num1 + num2);
80144
ans.unshift(sum % 10);
81145
sum = Math.floor(sum / 10);
82146
}
83147
return ans.join('');
84-
}
148+
};
85149
```
86150

87151
### **...**

solution/0000-0099/0043.Multiply Strings/README_EN.md

+70-7
Original file line numberDiff line numberDiff line change
@@ -25,21 +25,84 @@
2525
<li>Both <code>num1</code> and <code>num2</code>&nbsp;do not contain any leading zero, except the number <code>0</code> itself.</li>
2626
</ul>
2727

28-
2928
## Solutions
3029

3130
<!-- tabs:start -->
3231

3332
### **Python3**
3433

3534
```python
36-
35+
class Solution:
36+
def multiply(self, num1: str, num2: str) -> str:
37+
def add(s1, s2):
38+
n1, n2 = len(s1), len(s2)
39+
i = carry = 0
40+
res = []
41+
while i < max(n1, n2) or carry > 0:
42+
a = int(s1[n1 - i - 1]) if i < n1 else 0
43+
b = int(s2[n2 - i - 1]) if i < n2 else 0
44+
carry, t = divmod(a + b + carry, 10)
45+
res.append(str(t))
46+
i += 1
47+
return ''.join(res[::-1])
48+
49+
if '0' in [num1, num2]:
50+
return '0'
51+
n1, n2 = len(num1), len(num2)
52+
ans = ''
53+
for i in range(n1):
54+
a = int(num1[n1 - i - 1])
55+
t = ''
56+
for j in range(n2):
57+
b = int(num2[n2 - j - 1])
58+
t = add(t, str(a * b) + '0' * j)
59+
ans = add(ans, t + '0' * i)
60+
return ans
3761
```
3862

3963
### **Java**
4064

4165
```java
66+
class Solution {
67+
public String multiply(String num1, String num2) {
68+
if (Objects.equals(num1, "0") || Objects.equals(num2, "0")) {
69+
return "0";
70+
}
71+
int n1 = num1.length(), n2 = num2.length();
72+
String ans = "";
73+
for (int i = 0; i < n1; ++i) {
74+
int a = num1.charAt(n1 - i - 1) - '0';
75+
String t = "";
76+
for (int j = 0; j < n2; ++j) {
77+
int b = num2.charAt(n2 - j - 1) - '0';
78+
StringBuilder sb = new StringBuilder(String.valueOf(a * b));
79+
for (int k = 0; k < j; ++k) {
80+
sb.append(0);
81+
}
82+
t = add(t, sb.toString());
83+
}
84+
StringBuilder sb = new StringBuilder(t);
85+
for (int k = 0; k < i; ++k) {
86+
sb.append(0);
87+
}
88+
ans = add(ans, sb.toString());
89+
}
90+
return ans;
91+
}
4292

93+
private String add(String s1, String s2) {
94+
int n1 = s1.length(), n2 = s2.length();
95+
StringBuilder res = new StringBuilder();
96+
for (int i = 0, carry = 0; i < Math.max(n1, n2) || carry > 0; ++i) {
97+
int a = i < n1 ? (s1.charAt(n1 - i - 1) - '0') : 0;
98+
int b = i < n2 ? (s2.charAt(n2 - i - 1) - '0') : 0;
99+
int s = a + b + carry;
100+
carry = s / 10;
101+
res.append(s % 10);
102+
}
103+
return res.reverse().toString();
104+
}
105+
}
43106
```
44107

45108
### **TypeScript**
@@ -49,10 +112,10 @@ function multiply(num1: string, num2: string): string {
49112
if ([num1, num2].includes('0')) return '0';
50113
const n1 = num1.length, n2 = num2.length;
51114
let ans = '';
52-
for(let i = 0; i < n1; i++) {
115+
for (let i = 0; i < n1; i++) {
53116
let cur1 = parseInt(num1.charAt(n1 - i - 1), 10);
54117
let sum = '';
55-
for(let j = 0; j < n2; j++) {
118+
for (let j = 0; j < n2; j++) {
56119
let cur2 = parseInt(num2.charAt(n2 - j - 1), 10);
57120
sum = addString(sum, cur1 * cur2 + ('0'.repeat(j)));
58121
}
@@ -66,14 +129,14 @@ function addString(s1: string, s2: string): string {
66129
let ans = [];
67130
let sum = 0;
68131
for (let i = 0; i < n1 || i < n2 || sum > 0; i++) {
69-
let num1 = s1.charAt(i) ? parseInt(s1.charAt(i), 10) : 0;
70-
let num2 = s2.charAt(i) ? parseInt(s2.charAt(i), 10) : 0;
132+
let num1 = i < n1 ? parseInt(s1.charAt(n1 - i - 1), 10) : 0;
133+
let num2 = i < n2 ? parseInt(s2.charAt(n2 - i - 1), 10) : 0;
71134
sum += (num1 + num2);
72135
ans.unshift(sum % 10);
73136
sum = Math.floor(sum / 10);
74137
}
75138
return ans.join('');
76-
}
139+
};
77140
```
78141

79142
### **...**
Original file line numberDiff line numberDiff line change
@@ -1,28 +1,40 @@
11
class Solution {
22
public String multiply(String num1, String num2) {
3-
char[] chars1 = num1.toCharArray(),chars2 = num2.toCharArray();
4-
int[] result = new int[chars1.length+chars2.length];
5-
int pow = result.length-1;
6-
for (int i = chars1.length - 1; i >= 0; i--) {
7-
int a = chars1[i] - '0';
8-
int j = 0,bit = pow;
9-
for (int i1 = chars2.length - 1; i1 >= 0; i1--) {
10-
int b = chars2[i1] -'0';
11-
j = a*b + j + result[bit];
12-
result[bit--] = j%10;
13-
j = j/10;
3+
if (Objects.equals(num1, "0") || Objects.equals(num2, "0")) {
4+
return "0";
5+
}
6+
int n1 = num1.length(), n2 = num2.length();
7+
String ans = "";
8+
for (int i = 0; i < n1; ++i) {
9+
int a = num1.charAt(n1 - i - 1) - '0';
10+
String t = "";
11+
for (int j = 0; j < n2; ++j) {
12+
int b = num2.charAt(n2 - j - 1) - '0';
13+
StringBuilder sb = new StringBuilder(String.valueOf(a * b));
14+
for (int k = 0; k < j; ++k) {
15+
sb.append(0);
16+
}
17+
t = add(t, sb.toString());
1418
}
15-
while (j!=0){
16-
j += result[bit];
17-
result[bit--] = j%10;
18-
j = j/10;
19+
StringBuilder sb = new StringBuilder(t);
20+
for (int k = 0; k < i; ++k) {
21+
sb.append(0);
1922
}
20-
pow--;
23+
ans = add(ans, sb.toString());
24+
}
25+
return ans;
26+
}
27+
28+
private String add(String s1, String s2) {
29+
int n1 = s1.length(), n2 = s2.length();
30+
StringBuilder res = new StringBuilder();
31+
for (int i = 0, carry = 0; i < Math.max(n1, n2) || carry > 0; ++i) {
32+
int a = i < n1 ? (s1.charAt(n1 - i - 1) - '0') : 0;
33+
int b = i < n2 ? (s2.charAt(n2 - i - 1) - '0') : 0;
34+
int s = a + b + carry;
35+
carry = s / 10;
36+
res.append(s % 10);
2137
}
22-
StringBuilder builder = new StringBuilder();
23-
int i = 0;
24-
for (; i < result.length; i++) if (result[i] != 0) break;
25-
for (; i < result.length; i++) builder.append(result[i]);
26-
return builder.length()==0? "0" : builder.toString();
38+
return res.reverse().toString();
2739
}
2840
}
Original file line numberDiff line numberDiff line change
@@ -1,20 +1,26 @@
1-
class Solution(object):
2-
def multiply(self, num1, num2):
1+
class Solution:
2+
def multiply(self, num1: str, num2: str) -> str:
3+
def add(s1, s2):
4+
n1, n2 = len(s1), len(s2)
5+
i = carry = 0
6+
res = []
7+
while i < max(n1, n2) or carry > 0:
8+
a = int(s1[n1 - i - 1]) if i < n1 else 0
9+
b = int(s2[n2 - i - 1]) if i < n2 else 0
10+
carry, t = divmod(a + b + carry, 10)
11+
res.append(str(t))
12+
i += 1
13+
return ''.join(res[::-1])
314

4-
# Create a dictionary to store 0-9 key-value pairs
5-
dict_nums={"0": 0, "1": 1, "2": 2, "3": 3, "4": 4, "5": 5, "6": 6, "7": 7, "8": 8, "9": 9}
6-
number1 = 0
7-
number2 = 0
8-
9-
# Convert num1 in integer format
10-
for i in num1:
11-
key = dict_nums[i]
12-
number1 = (number1 * 10) + key
13-
14-
15-
# Convert num2 in integer format
16-
for i in num2:
17-
key = dict_nums[i]
18-
number2 = (number2 * 10) + key
19-
20-
return str(number1 * number2)
15+
if '0' in [num1, num2]:
16+
return '0'
17+
n1, n2 = len(num1), len(num2)
18+
ans = ''
19+
for i in range(n1):
20+
a = int(num1[n1 - i - 1])
21+
t = ''
22+
for j in range(n2):
23+
b = int(num2[n2 - j - 1])
24+
t = add(t, str(a * b) + '0' * j)
25+
ans = add(ans, t + '0' * i)
26+
return ans

solution/0000-0099/0043.Multiply Strings/Solution.ts

+5-5
Original file line numberDiff line numberDiff line change
@@ -2,10 +2,10 @@ function multiply(num1: string, num2: string): string {
22
if ([num1, num2].includes('0')) return '0';
33
const n1 = num1.length, n2 = num2.length;
44
let ans = '';
5-
for(let i = 0; i < n1; i++) {
5+
for (let i = 0; i < n1; i++) {
66
let cur1 = parseInt(num1.charAt(n1 - i - 1), 10);
77
let sum = '';
8-
for(let j = 0; j < n2; j++) {
8+
for (let j = 0; j < n2; j++) {
99
let cur2 = parseInt(num2.charAt(n2 - j - 1), 10);
1010
sum = addString(sum, cur1 * cur2 + ('0'.repeat(j)));
1111
}
@@ -19,11 +19,11 @@ function addString(s1: string, s2: string): string {
1919
let ans = [];
2020
let sum = 0;
2121
for (let i = 0; i < n1 || i < n2 || sum > 0; i++) {
22-
let num1 = s1.charAt(i) ? parseInt(s1.charAt(i), 10) : 0;
23-
let num2 = s2.charAt(i) ? parseInt(s2.charAt(i), 10) : 0;
22+
let num1 = i < n1 ? parseInt(s1.charAt(n1 - i - 1), 10) : 0;
23+
let num2 = i < n2 ? parseInt(s2.charAt(n2 - i - 1), 10) : 0;
2424
sum += (num1 + num2);
2525
ans.unshift(sum % 10);
2626
sum = Math.floor(sum / 10);
2727
}
2828
return ans.join('');
29-
}
29+
};

0 commit comments

Comments
 (0)