43. 字符串相乘

给定两个以字符串形式表示的非负整数 num1 和 num2,返回 num1 和 num2 的乘积,它们的乘积也表示为字符串形式。

示例 1:

输入: num1 = "2", num2 = "3"
输出: "6"

示例 2:

输入: num1 = "123", num2 = "456"
输出: "56088"

说明:

num1 和 num2 的长度小于110。
num1 和 num2 只包含数字 0-9。
num1 和 num2 均不以零开头,除非是数字 0 本身。

不能使用任何标准库的大数类型(比如 BigInteger)或直接将输入转换为整数来处理。

思路:

按照乘法规则硬算,一开始没考虑怎么省空间和时间绕了弯路,写了一堆函数才解出来,后面看了博客https://www.cnblogs.com/wmx24/p/9064134.html觉得自己真的蠢哈哈哈,可以预先设定一个结果作为数组,按照这个思路改完之后性能得到提升。
修改前:

class Solution {
public:
    string everymul(string num, char c)
    {
        string res = "";
        int digits = 0;
        for (int i = num.size()-1; i>=0; i--)
        {
            int numofc = c - '0';
            int numofcurr = num[i] - '0';
            int mul = numofc * numofcurr + digits;
            res = char(mul % 10 + '0') + res;
        
            digits = mul / 10;
            if (i==0 && digits)
            {
                res = char(digits + '0') + res;
            }
        }
        return res;
    }

    string everyadd(string num1, string num2)
    {

        if (num1.size()= 0)
        {
            int add = num1[p] + num2[p] - '0' - '0' + digits;
            res = char(add % 10 + '0') + res;
            digits = add / 10;
            if (!p && digits)
            {
                res = char('0' + digits) + res;
            }
            p--;
        }
        return res;
    }

    string multiply(string num1, string num2)
    {
        if(num1=="0" || num2=="0")
        {
            return "0";
        }
        if (num1.size() mulres;
        for (int i = num2.size() - 1; i >= 0; i--)
        {
            mulres.push_back(everymul(num1,num2[i]));
        }
        for (int i = 0; i < mulres.size(); i++)
        {
            for (int j = 0; j < i; j++)
            {
                mulres[i].push_back('0');
            }
        }
        for (int i = 0; i < mulres.size(); i++)
        {
            res = everyadd(res, mulres[i]);
        }
        return res;
    }
};

修改后:

class Solution {
public:
    string multiply(string num1, string num2) {
        int l1=num1.size();
        int l2=num2.size();
        if(!l1||!l2)
        {
            return "";
        }
        string res(l1+l2,'0');
        for(int i=l1-1;i>=0;i--)
        {
            int add=0;
            for(int j=l2-1;j>=0;j--)
            {
                int mul=(num1[i]-'0')*(num2[j]-'0');
                int sum=mul%10+res[i+j+1]+add-'0';
                res[i+j+1]=sum%10+'0';
                add=mul/10+sum/10;
            }
            res[i]+=add;
        }
        for(int i=0;i

你可能感兴趣的:(43. 字符串相乘)