您的位置:首页 > 其它

LeetCode: Multiply Strings

2015-04-24 14:34 330 查看
Title:

Given two numbers represented as strings, return multiplication of the numbers as a string.

Note: The numbers can be arbitrarily large and are non-negative.

不难,但是也不容易一次AC,说明自己考虑问题不够仔细

class Solution {
public:
string multiply(string num1, string num2) {
string result;
result.push_back('0');
if ((num1.size() == 1 && num1[0] == '0') || (num2.size() == 1 && num2[0] == '0'))
return result;
for (int i = num2.size()-1; i >= 0; i--){
int plus = 0;
string s;
for (int t = 0; t<num2.size()-i-1; t++){
s.push_back(result[t]);
}

int a = num2[i] - '0';
int p = num2.size() - i -1;
for (int j = num1.size()-1; j >=0; j--){
int m;
int b= num1[j]-'0';
if (p < result.size())
m = a * b + plus + result[p]-'0';
else
m = a * b + plus;
p++;
plus = m / 10;
s.push_back((m % 10)+'0');
}
if (plus != 0)
s.push_back(plus+'0');
result = s;
//results.push_back(result);
}
reverse(result.begin(),result.end());
return result;
}
};


更好的方法

class Solution {
public:
string multiply(string num1, string num2) {
if(num1=="0" || num2=="0") return "0";
int l1 = num1.length(), l2 = num2.length();
int* n1 = new int[l1];
int* n2 = new int[l2];
int* res = new int[l1+l2];
memset(res,0,sizeof(int)*(l1+l2));
for(int i=0; i<l1; ++i)
n1[i] = num1[i] - '0';
for(int i=0; i<l2; ++i)
n2[i] = num2[i] - '0';

for(int i=0; i<l1; ++i)
for (int j=0; j<l2; ++j)
res[i+j+1] += n1[i]*n2[j];

string ss = "";
for (int k=l1+l2-1; k>=0; --k){
if(k>0) res[k-1] += res[k]/10;
res[k] %= 10;
ss = char(res[k]+'0')+ss;
}
ss = ss[0]=='0'? ss.substr(1):ss;
//return ss.empty()?"0":ss;
return ss;
}
};
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: