题目
方法一:模拟
竖式乘法示意图如下:
通过模拟「竖式乘法」的方法计算乘积,计算
s
\textit{s}
s 的每一位和
t
\textit{t}
t 的每一位的乘积进行存储,然后做加法。
class Solution {
public String multiply(String s, String t) {
if ("0".equals(s) || "0".equals(t)) {
return "0";
}
int sLen = s.length(), tLen = t.length();
int[] sArr = new int[sLen];
int[] tArr = new int[tLen];
for (int i = 0; i < sLen; i++) {
sArr[i] = s.charAt(i) - '0';
}
for (int i = 0; i < tLen; i++) {
tArr[i] = t.charAt(i) - '0';
}
int[] result = new int[sLen + tLen - 1];
for (int i = 0; i < sLen; i++) {
for (int j = 0; j < tLen; j++) {
result[i+j] += sArr[i] * tArr[j];
}
}
int carry = 0;
StringBuilder res = new StringBuilder();
int idx = result.length - 1;
while ((idx >= 0) || carry != 0) {
int sum = idx >= 0 ? carry + result[idx] : carry;
res.append(sum % 10);
carry = sum / 10;
idx--;
}
return res.length() == 0 ? "0" : res.reverse().toString();
}
}
-
时间复杂度:
O
(
m
n
)
O(mn)
O(mn),其中
m
m
m 和
n
n
n 分别是
s
\textit{s}
s 和
t
\textit{t}
t 的长度。需要计算
s
\textit{s}
s 的每一位和
t
\textit{t}
t 的每一位的乘积 -
空间复杂度:
O
(
m
+
n
)
O(m+n)
O(m+n)。需要创建一个长度为
m
+
n
?
1
m+n-1
m+n?1 的数组存储乘积
|