Leetcode 43 字符串相乘

模擬大數乘法即可,先用res數組存放相乘後的數字結果,再統一處理進位並轉化爲字符串。需注意當某一方爲0時可直接輸出"0"退出。這種暴力解法都可以拿到獲得前98%。更高效的做法是用FFT,時間複雜度接近於O(nlogn),n爲字符串長度。FFT板子見鏈接

在這裏插入圖片描述

class Solution {
public:
    string multiply(string num1, string num2) {
        if(num1=="0" || num2=="0") return "0";
        int m = num1.size(), n = num2.size();
        reverse(num1.begin(), num1.end());
        reverse(num2.begin(), num2.end());
        int res[m+n] = {0};
        for(int i = 0; i < m; i++)
            for(int j = 0; j < n; j++)
                res[i+j] += (num1[i]-'0')*(num2[j]-'0');
        string s = "";
        for(int i = 0; i < m+n-1; i++)
        {
            s += (char)(res[i]%10+'0');
            res[i+1] += res[i]/10;
        }
        if(res[m+n-1]>0) s += (char)(res[m+n-1]+'0');
        reverse(s.begin(), s.end());
        return s;
    }
};
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章