34
34
``` python
35
35
class Solution :
36
36
def multiply (self , num1 : str , num2 : str ) -> str :
37
- def mul (b , i ):
38
- j, t = m - 1 , 0
39
- while j >= 0 or t:
40
- if j >= 0 :
41
- a = int (num1[j])
42
- t += a * b
43
- res[i] += t % 10
44
- if res[i] >= 10 :
45
- res[i] %= 10
46
- res[i + 1 ] += 1
47
- i, j = i + 1 , j - 1
48
- t //= 10
49
-
37
+ if num1 == " 0" or num2 == " 0" :
38
+ return " 0"
50
39
m, n = len (num1), len (num2)
51
- res = [0 ] * (m + n)
52
- for i in range (n):
53
- b = int (num2[n - 1 - i])
54
- mul(b, i)
55
- while len (res) > 1 and res[- 1 ] == 0 :
56
- res.pop()
57
- return ' ' .join([str (v) for v in res[::- 1 ]])
40
+ arr = [0 ] * (m + n)
41
+ for i in range (m - 1 , - 1 , - 1 ):
42
+ a = int (num1[i])
43
+ for j in range (n - 1 , - 1 , - 1 ):
44
+ b = int (num2[j])
45
+ arr[i + j + 1 ] += a * b
46
+ for i in range (m + n - 1 , 0 , - 1 ):
47
+ arr[i - 1 ] += arr[i] // 10
48
+ arr[i] %= 10
49
+ i = 0 if arr[0 ] else 1
50
+ return " " .join(str (x) for x in arr[i:])
58
51
```
59
52
60
53
### ** Java**
61
54
62
55
``` java
63
56
class Solution {
64
57
public String multiply (String num1 , String num2 ) {
65
- int m = num1. length(), n = num2. length();
66
- int [] res = new int [m + n];
67
- for (int i = 0 ; i < n; ++ i) {
68
- int b = num2. charAt(n - 1 - i) - ' 0' ;
69
- mul(num1, b, i, res);
58
+ if (" 0" . equals(num1) || " 0" . equals(num2)) {
59
+ return " 0" ;
70
60
}
71
- StringBuilder ans = new StringBuilder ();
72
- for (int v : res) {
73
- ans. append(v);
61
+ int m = num1. length(), n = num2. length();
62
+ int [] arr = new int [m + n];
63
+ for (int i = m - 1 ; i >= 0 ; -- i) {
64
+ int a = num1. charAt(i) - ' 0' ;
65
+ for (int j = n - 1 ; j >= 0 ; -- j) {
66
+ int b = num2. charAt(j) - ' 0' ;
67
+ arr[i + j + 1 ] += a * b;
68
+ }
74
69
}
75
- while (ans. length() > 1 && ans. charAt(ans. length() - 1 ) == ' 0' ) {
76
- ans. deleteCharAt(ans. length() - 1 );
70
+ for (int i = arr. length - 1 ; i > 0 ; -- i) {
71
+ arr[i - 1 ] += arr[i] / 10 ;
72
+ arr[i] %= 10 ;
77
73
}
78
- return ans. reverse(). toString();
79
- }
80
-
81
- private void mul (String A , int b , int i , int [] res ) {
82
- for (int j = A . length() - 1 , t = 0 ; j >= 0 || t > 0 ; -- j) {
83
- if (j >= 0 ) {
84
- int a = A . charAt(j) - ' 0' ;
85
- t += a * b;
86
- }
87
- res[i++ ] += t % 10 ;
88
- if (res[i - 1 ] >= 10 ) {
89
- res[i - 1 ] %= 10 ;
90
- ++ res[i];
91
- }
92
- t /= 10 ;
74
+ int i = arr[0 ] == 0 ? 1 : 0 ;
75
+ StringBuilder ans = new StringBuilder ();
76
+ for (; i < arr. length; ++ i) {
77
+ ans. append(arr[i]);
93
78
}
79
+ return ans. toString();
94
80
}
95
81
}
96
82
```
@@ -101,32 +87,28 @@ class Solution {
101
87
class Solution {
102
88
public:
103
89
string multiply(string num1, string num2) {
104
- int m = num1.size(), n = num2.size();
105
- vector<int > res(m + n);
106
- for (int i = 0; i < n; ++i) {
107
- int b = num2[ n - 1 - i] - '0';
108
- mul(num1, b, i, res);
90
+ if (num1 == "0" || num2 == "0") {
91
+ return "0";
109
92
}
110
- string ans = "";
111
- for (int v : res) ans.push_back(v + '0');
112
- while (ans.size() > 1 && ans.back() == '0') ans.pop_back();
113
- reverse(ans.begin(), ans.end());
114
- return ans;
115
- }
116
-
117
- void mul(string A, int b, int i, vector<int>& res) {
118
- for (int j = A.size() - 1, t = 0; j >= 0 || t > 0; --j) {
119
- if (j >= 0) {
120
- int a = A[j] - '0';
121
- t += a * b;
122
- }
123
- res[i++] += t % 10 ;
124
- if (res[i - 1 ] >= 10 ) {
125
- res[i - 1] %= 10;
126
- ++res[i];
93
+ int m = num1.size(), n = num2.size();
94
+ vector<int > arr(m + n);
95
+ for (int i = m - 1; i >= 0; --i) {
96
+ int a = num1[ i] - '0';
97
+ for (int j = n - 1; j >= 0; --j) {
98
+ int b = num2[ j] - '0';
99
+ arr[ i + j + 1] += a * b;
127
100
}
128
- t /= 10;
129
101
}
102
+ for (int i = arr.size() - 1; i; --i) {
103
+ arr[ i - 1] += arr[ i] / 10;
104
+ arr[ i] %= 10;
105
+ }
106
+ int i = arr[ 0] ? 0 : 1;
107
+ string ans;
108
+ for (; i < arr.size(); ++i) {
109
+ ans += '0' + arr[ i] ;
110
+ }
111
+ return ans;
130
112
}
131
113
};
132
114
```
@@ -135,35 +117,29 @@ public:
135
117
136
118
```go
137
119
func multiply(num1 string, num2 string) string {
120
+ if num1 == "0" || num2 == "0" {
121
+ return "0"
122
+ }
138
123
m, n := len(num1), len(num2)
139
- res := make ([]int , m+n)
140
- mul := func (b, i int ) {
141
- for j , t := m-1 , 0 ; j >= 0 || t > 0 ; i, j = i+1 , j-1 {
142
- if j >= 0 {
143
- a := int (num1[j] - ' 0' )
144
- t += a * b
145
- }
146
- res[i] += t % 10
147
- if res[i] >= 10 {
148
- res[i] %= 10
149
- res[i+1 ]++
150
- }
151
- t /= 10
124
+ arr := make([]int, m+n)
125
+ for i := m - 1; i >= 0; i-- {
126
+ a := int(num1[i] - '0')
127
+ for j := n - 1; j >= 0; j-- {
128
+ b := int(num2[j] - '0')
129
+ arr[i+j+1] += a * b
152
130
}
153
131
}
154
- for i := 0 ; i < n; i++ {
155
- b := num2[n-1 -i] - ' 0'
156
- mul (int (b), i)
157
- }
158
- var ans []byte
159
- for _ , v := range res {
160
- ans = append (ans, byte (v+' 0' ))
132
+ for i := len(arr) - 1; i > 0; i-- {
133
+ arr[i-1] += arr[i] / 10
134
+ arr[i] %= 10
161
135
}
162
- for len (ans) > 1 && ans[len (ans)-1 ] == ' 0' {
163
- ans = ans[:len (ans)-1 ]
136
+ i := 0
137
+ if arr[0] == 0 {
138
+ i = 1
164
139
}
165
- for i , j := 0 , len (ans)-1 ; i < j; i, j = i+1 , j-1 {
166
- ans[i], ans[j] = ans[j], ans[i]
140
+ ans := []byte{}
141
+ for ; i < len(arr); i++ {
142
+ ans = append(ans, byte('0'+arr[i]))
167
143
}
168
144
return string(ans)
169
145
}
0 commit comments