链接
https://leetcode-cn.com/problems/multiply-strings/
耗时
解题:1 h
题解:10 min
题意
给定两个以字符串形式表示的非负整数 num1 和 num2,返回 num1 和 num2 的乘积,它们的乘积也表示为字符串形式。
思路
将 num1 和 num2 分别 反向 转成 数组(0~n-1 分别存储最底位到最高位),然后乘法的结果最多是 n1+n2 这么长,开一个 n1+n2 这么长的结果数组。每一位数字分别进行乘法,结果数字的位数是两个乘数的位数相加。然后顺序进位。最后去掉前导零,将剩余的数字逆序放入结果字符串中。
时间复杂度: O ( n 1 ∗ n 2 ) O(n1*n2) O(n1∗n2)
AC代码
class Solution {
public:
string multiply(string num1, string num2) {
int n1 = num1.size();
int n2 = num2.size();
vector<int> a, b, res(n1+n2+10, 0);
for(int i = n1-1; i >= 0; --i) a.push_back(num1[i]-'0');
for(int i = n2-1; i >= 0; --i) b.push_back(num2[i]-'0');
for(int i = 0; i < n1; ++i) {
for(int j = 0; j < n2; ++j) {
res[i+j] += a[i]*b[j];
}
}
int add = 0, i = 0;
while(i < res.size() || add > 0) {
int tmp = res[i]+add;
res[i] = tmp%10;
add = tmp/10;
i++;
}
string ans;
i = res.size()-1;
while(i > 0 && res[i] == 0) i--;
for(; i >= 0; --i) {
ans.push_back(res[i]+'0');
}
return ans;
}
};