LeetCode: Multiply Strings

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;
    }
};
原文地址:https://www.cnblogs.com/yxzfscg/p/4453419.html