class Solution {
public:
string multiply(string num1, string num2) {
// Start typing your C/C++ solution below
// DO NOT write int main() function
int m = num1.size();
int n = num2.size();
vector<int> v1(m);
vector<int> v2(n);
vector<int> v3(m + n);
for (int i = 0; i < m; i++)
v1[i] = num1[m - 1 - i] - '0';
for (int j = 0; j < n; j++)
v2[j] = num2[n - 1 - j] - '0';
for (int i = 0; i < m; i++)
for (int j = 0; j < n; j++)
v3[i + j] += v1[i] * v2[j];
for (int i = 0; i < m + n - 1; i++) {
v3[i + 1] += v3[i] / 10;
v3[i] %= 10;
}
int fin = m + n - 1;
while (v3[fin] == 0)
fin--;
string ret = "";
for (int i = fin; i >= 0; i--)
ret += v3[i] + '0';
return ret.empty() ? "0" : ret;
}
};
Small Case: 8ms
Large Case: 24ms
Time: O(m * n)
Space: O(m + n)