Skip to content

Commit 9850c03

Browse files
authored
feat: add solutions to lc problems: No.0043,0415 (doocs#2141)
* No.0043.Multiply Strings * No.0415.Add Strings
1 parent 1e1b672 commit 9850c03

File tree

8 files changed

+317
-237
lines changed

8 files changed

+317
-237
lines changed

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

+76-72
Original file line numberDiff line numberDiff line change
@@ -149,97 +149,60 @@ public:
149149
150150
```go
151151
func multiply(num1 string, num2 string) string {
152+
if num1 == "0" || num2 == "0" {
153+
return "0"
154+
}
152155
m, n := len(num1), len(num2)
153-
res := make([]int, m+n)
154-
mul := func(b, i int) {
155-
for j, t := m-1, 0; j >= 0 || t > 0; i, j = i+1, j-1 {
156-
if j >= 0 {
157-
a := int(num1[j] - '0')
158-
t += a * b
159-
}
160-
res[i] += t % 10
161-
if res[i] >= 10 {
162-
res[i] %= 10
163-
res[i+1]++
164-
}
165-
t /= 10
156+
arr := make([]int, m+n)
157+
for i := m - 1; i >= 0; i-- {
158+
a := int(num1[i] - '0')
159+
for j := n - 1; j >= 0; j-- {
160+
b := int(num2[j] - '0')
161+
arr[i+j+1] += a * b
166162
}
167163
}
168-
for i := 0; i < n; i++ {
169-
b := num2[n-1-i] - '0'
170-
mul(int(b), i)
171-
}
172-
var ans []byte
173-
for _, v := range res {
174-
ans = append(ans, byte(v+'0'))
164+
for i := len(arr) - 1; i > 0; i-- {
165+
arr[i-1] += arr[i] / 10
166+
arr[i] %= 10
175167
}
176-
for len(ans) > 1 && ans[len(ans)-1] == '0' {
177-
ans = ans[:len(ans)-1]
168+
i := 0
169+
if arr[0] == 0 {
170+
i = 1
178171
}
179-
for i, j := 0, len(ans)-1; i < j; i, j = i+1, j-1 {
180-
ans[i], ans[j] = ans[j], ans[i]
172+
ans := []byte{}
173+
for ; i < len(arr); i++ {
174+
ans = append(ans, byte('0'+arr[i]))
181175
}
182176
return string(ans)
183177
}
184178
```
185179

186180
### **TypeScript**
187181

188-
```ts
189-
function multiply(num1: string, num2: string): string {
190-
if ([num1, num2].includes('0')) return '0';
191-
const n1 = num1.length,
192-
n2 = num2.length;
193-
let ans = '';
194-
for (let i = 0; i < n1; i++) {
195-
let cur1 = parseInt(num1.charAt(n1 - i - 1), 10);
196-
let sum = '';
197-
for (let j = 0; j < n2; j++) {
198-
let cur2 = parseInt(num2.charAt(n2 - j - 1), 10);
199-
sum = addString(sum, cur1 * cur2 + '0'.repeat(j));
200-
}
201-
ans = addString(ans, sum + '0'.repeat(i));
202-
}
203-
return ans;
204-
}
205-
206-
function addString(s1: string, s2: string): string {
207-
const n1 = s1.length,
208-
n2 = s2.length;
209-
let ans = [];
210-
let sum = 0;
211-
for (let i = 0; i < n1 || i < n2 || sum > 0; i++) {
212-
let num1 = i < n1 ? parseInt(s1.charAt(n1 - i - 1), 10) : 0;
213-
let num2 = i < n2 ? parseInt(s2.charAt(n2 - i - 1), 10) : 0;
214-
sum += num1 + num2;
215-
ans.unshift(sum % 10);
216-
sum = Math.floor(sum / 10);
217-
}
218-
return ans.join('');
219-
}
220-
```
221-
222182
```ts
223183
function multiply(num1: string, num2: string): string {
224184
if (num1 === '0' || num2 === '0') {
225185
return '0';
226186
}
227-
228-
const n = num1.length;
229-
const m = num2.length;
230-
const res = [];
231-
for (let i = 0; i < n; i++) {
232-
const a = Number(num1[n - i - 1]);
233-
let sum = 0;
234-
for (let j = 0; j < m || sum !== 0; j++) {
235-
const b = Number(num2[m - j - 1] ?? 0);
236-
sum += a * b + (res[i + j] ?? 0);
237-
res[i + j] = sum % 10;
238-
sum = Math.floor(sum / 10);
187+
const m: number = num1.length;
188+
const n: number = num2.length;
189+
const arr: number[] = Array(m + n).fill(0);
190+
for (let i: number = m - 1; i >= 0; i--) {
191+
const a: number = +num1[i];
192+
for (let j: number = n - 1; j >= 0; j--) {
193+
const b: number = +num2[j];
194+
arr[i + j + 1] += a * b;
239195
}
240196
}
241-
242-
return res.reverse().join('');
197+
for (let i: number = arr.length - 1; i > 0; i--) {
198+
arr[i - 1] += Math.floor(arr[i] / 10);
199+
arr[i] %= 10;
200+
}
201+
let i: number = 0;
202+
while (i < arr.length && arr[i] === 0) {
203+
i++;
204+
}
205+
return arr.slice(i).join('');
243206
}
244207
```
245208

@@ -277,6 +240,47 @@ impl Solution {
277240
}
278241
```
279242

243+
### **C#**
244+
245+
```cs
246+
public class Solution {
247+
public string Multiply(string num1, string num2) {
248+
if (num1 == "0" || num2 == "0") {
249+
return "0";
250+
}
251+
252+
int m = num1.Length;
253+
int n = num2.Length;
254+
int[] arr = new int[m + n];
255+
256+
for (int i = m - 1; i >= 0; i--) {
257+
int a = num1[i] - '0';
258+
for (int j = n - 1; j >= 0; j--) {
259+
int b = num2[j] - '0';
260+
arr[i + j + 1] += a * b;
261+
}
262+
}
263+
264+
for (int i = arr.Length - 1; i > 0; i--) {
265+
arr[i - 1] += arr[i] / 10;
266+
arr[i] %= 10;
267+
}
268+
269+
int index = 0;
270+
while (index < arr.Length && arr[index] == 0) {
271+
index++;
272+
}
273+
274+
StringBuilder ans = new StringBuilder();
275+
for (; index < arr.Length; index++) {
276+
ans.Append(arr[index]);
277+
}
278+
279+
return ans.ToString();
280+
}
281+
}
282+
```
283+
280284
### **...**
281285

282286
```

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

+58-48
Original file line numberDiff line numberDiff line change
@@ -164,61 +164,30 @@ func multiply(num1 string, num2 string) string {
164164

165165
### **TypeScript**
166166

167-
```ts
168-
function multiply(num1: string, num2: string): string {
169-
if ([num1, num2].includes('0')) return '0';
170-
const n1 = num1.length,
171-
n2 = num2.length;
172-
let ans = '';
173-
for (let i = 0; i < n1; i++) {
174-
let cur1 = parseInt(num1.charAt(n1 - i - 1), 10);
175-
let sum = '';
176-
for (let j = 0; j < n2; j++) {
177-
let cur2 = parseInt(num2.charAt(n2 - j - 1), 10);
178-
sum = addString(sum, cur1 * cur2 + '0'.repeat(j));
179-
}
180-
ans = addString(ans, sum + '0'.repeat(i));
181-
}
182-
return ans;
183-
}
184-
185-
function addString(s1: string, s2: string): string {
186-
const n1 = s1.length,
187-
n2 = s2.length;
188-
let ans = [];
189-
let sum = 0;
190-
for (let i = 0; i < n1 || i < n2 || sum > 0; i++) {
191-
let num1 = i < n1 ? parseInt(s1.charAt(n1 - i - 1), 10) : 0;
192-
let num2 = i < n2 ? parseInt(s2.charAt(n2 - i - 1), 10) : 0;
193-
sum += num1 + num2;
194-
ans.unshift(sum % 10);
195-
sum = Math.floor(sum / 10);
196-
}
197-
return ans.join('');
198-
}
199-
```
200-
201167
```ts
202168
function multiply(num1: string, num2: string): string {
203169
if (num1 === '0' || num2 === '0') {
204170
return '0';
205171
}
206-
207-
const n = num1.length;
208-
const m = num2.length;
209-
const res = [];
210-
for (let i = 0; i < n; i++) {
211-
const a = Number(num1[n - i - 1]);
212-
let sum = 0;
213-
for (let j = 0; j < m || sum !== 0; j++) {
214-
const b = Number(num2[m - j - 1] ?? 0);
215-
sum += a * b + (res[i + j] ?? 0);
216-
res[i + j] = sum % 10;
217-
sum = Math.floor(sum / 10);
172+
const m: number = num1.length;
173+
const n: number = num2.length;
174+
const arr: number[] = Array(m + n).fill(0);
175+
for (let i: number = m - 1; i >= 0; i--) {
176+
const a: number = +num1[i];
177+
for (let j: number = n - 1; j >= 0; j--) {
178+
const b: number = +num2[j];
179+
arr[i + j + 1] += a * b;
218180
}
219181
}
220-
221-
return res.reverse().join('');
182+
for (let i: number = arr.length - 1; i > 0; i--) {
183+
arr[i - 1] += Math.floor(arr[i] / 10);
184+
arr[i] %= 10;
185+
}
186+
let i: number = 0;
187+
while (i < arr.length && arr[i] === 0) {
188+
i++;
189+
}
190+
return arr.slice(i).join('');
222191
}
223192
```
224193

@@ -256,6 +225,47 @@ impl Solution {
256225
}
257226
```
258227

228+
### **C#**
229+
230+
```cs
231+
public class Solution {
232+
public string Multiply(string num1, string num2) {
233+
if (num1 == "0" || num2 == "0") {
234+
return "0";
235+
}
236+
237+
int m = num1.Length;
238+
int n = num2.Length;
239+
int[] arr = new int[m + n];
240+
241+
for (int i = m - 1; i >= 0; i--) {
242+
int a = num1[i] - '0';
243+
for (int j = n - 1; j >= 0; j--) {
244+
int b = num2[j] - '0';
245+
arr[i + j + 1] += a * b;
246+
}
247+
}
248+
249+
for (int i = arr.Length - 1; i > 0; i--) {
250+
arr[i - 1] += arr[i] / 10;
251+
arr[i] %= 10;
252+
}
253+
254+
int index = 0;
255+
while (index < arr.Length && arr[index] == 0) {
256+
index++;
257+
}
258+
259+
StringBuilder ans = new StringBuilder();
260+
for (; index < arr.Length; index++) {
261+
ans.Append(arr[index]);
262+
}
263+
264+
return ans.ToString();
265+
}
266+
}
267+
```
268+
259269
### **...**
260270

261271
```
Original file line numberDiff line numberDiff line change
@@ -1,36 +1,36 @@
1-
using System.Text;
2-
3-
public class Solution {
4-
public string Multiply(string num1, string num2) {
5-
var digits = new int[num1.Length + num2.Length];
6-
for (var i = 0; i < num1.Length; ++i)
7-
{
8-
for (var j = 0; j < num2.Length; ++j)
9-
{
10-
var digit1 = num1[num1.Length - i - 1] - '0';
11-
var digit2 = num2[num2.Length - j - 1] - '0';
12-
var product = digit1 * digit2;
13-
digits[i + j] += product;
14-
}
15-
}
16-
17-
var carry = 0;
18-
for (var i = 0; i < digits.Length; ++i)
19-
{
20-
digits[i] += carry;
21-
carry = digits[i] / 10;
22-
digits[i] %= 10;
23-
}
24-
25-
var sb = new StringBuilder();
26-
for (var i = digits.Length - 1; i >= 0; --i)
27-
{
28-
if (digits[i] > 0 || sb.Length > 0)
29-
{
30-
sb.Append((char)(digits[i] + '0'));
31-
}
32-
}
33-
if (sb.Length == 0) sb.Append('0');
34-
return sb.ToString();
35-
}
1+
public class Solution {
2+
public string Multiply(string num1, string num2) {
3+
if (num1 == "0" || num2 == "0") {
4+
return "0";
5+
}
6+
7+
int m = num1.Length;
8+
int n = num2.Length;
9+
int[] arr = new int[m + n];
10+
11+
for (int i = m - 1; i >= 0; i--) {
12+
int a = num1[i] - '0';
13+
for (int j = n - 1; j >= 0; j--) {
14+
int b = num2[j] - '0';
15+
arr[i + j + 1] += a * b;
16+
}
17+
}
18+
19+
for (int i = arr.Length - 1; i > 0; i--) {
20+
arr[i - 1] += arr[i] / 10;
21+
arr[i] %= 10;
22+
}
23+
24+
int index = 0;
25+
while (index < arr.Length && arr[index] == 0) {
26+
index++;
27+
}
28+
29+
StringBuilder ans = new StringBuilder();
30+
for (; index < arr.Length; index++) {
31+
ans.Append(arr[index]);
32+
}
33+
34+
return ans.ToString();
35+
}
3636
}

0 commit comments

Comments
 (0)