题目

思路
- 把竖式乘法进一步分解
- 填当前位:
res[i + j + 1]
- 填进位:
res[i + j]
- num1和num2乘积的长度:
m+n
或者m+n-1
,所以在res声明时直接声明M+N大小,证明:


代码
class Solution {
public String multiply(String num1, String num2) {
int[] tmp = new int[num1.length() + num2.length()];
for (int i = num1.length() - 1; i >= 0; i--) {
for (int j = num2.length() - 1; j >= 0; j--) {
int val1 = num1.charAt(i) - '0';
int val2 = num2.charAt(j) - '0';
int cur = tmp[i + j + 1] + val1 * val2;
tmp[i + j + 1] = cur % 10;
tmp[i + j] += cur / 10;
}
}
String res = "";
for (int k = 0; k < tmp.length; k++) {
if (res.length() == 0 && tmp[k] == 0) {
continue;
}
res += tmp[k] + "";
}
return res.equals("") ? "0" : res;
}
}