您的位置:首页 > 其它

LeetCode – Refresh – Multiply Strings

2015-03-21 09:13 417 查看
Notes:

1. Dont have to allocate l1*l2, just l1+l2 is fare enough.

2. remember i--, j--.

3. upgrade[i+j] is += not = rec[i+j+1]/10;

class Solution {
public:
string multiply(string num1, string num2) {
int l1 = num1.size(), l2 = num2.size();
if (l1 == 0 || l2 == 0 || num1 == "0" || num2 == "0") return "0";
vector<int> rec(l1+l2, 0);
unordered_map<int, int> upgrade;
string result;
for (int i = l1-1; i >= 0; i--) {
for (int j = l2-1; j >=0; j--) {
rec[i+j+1] += int(num1[i] - '0') * int(num2[j] - '0');
rec[i+j+1] += upgrade[i+j+1];
upgrade[i+j+1] = 0;
upgrade[i+j] += rec[i+j+1]/10;
rec[i+j+1] %= 10;
if (i == 0 && j == 0 && upgrade[0]) rec[0] = upgrade[0];
}
}
bool flag = true;
for (int i = 0; i < l1+l2; i++) {
if (flag && rec[i] == 0) continue;
else flag = false;
result += char(rec[i] + '0');
}
return result;
}
};
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: