国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

LeetCode —— 43. 字符串相乘

這篇具有很好參考價(jià)值的文章主要介紹了LeetCode —— 43. 字符串相乘。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

LeetCode —— 43. 字符串相乘,力扣題目匯總,leetcode,算法,c++
LeetCode —— 43. 字符串相乘,力扣題目匯總,leetcode,算法,c++

????????????????????????Take your time ! ????????????????????????
??個(gè)人主頁:??????大魔王??????
??所屬專欄:??魔王的修煉之路–C++??
如果你覺得這篇文章對(duì)你有幫助,請(qǐng)?jiān)谖恼陆Y(jié)尾處留下你的點(diǎn)贊??和關(guān)注??,支持一下博主。同時(shí)記得收藏?這篇文章,方便以后重新閱讀。

43. 字符串相乘

這個(gè)相當(dāng)于是字符串相加的進(jìn)階版,需要用到字符串相加實(shí)現(xiàn)的內(nèi)容。

幾個(gè)月前做過一遍都做了好幾個(gè)小時(shí),這次又做有用了好幾個(gè)小時(shí)
之前的思路是每次用完數(shù)據(jù)pop,這次的實(shí)現(xiàn)是通過對(duì)迭代器的控制
花了三四個(gè)小時(shí),無語了,總結(jié)出來就兩個(gè)大問題:

  1. 對(duì)于任何情況的位數(shù)0都不應(yīng)該在轉(zhuǎn)換為int時(shí)去管,因?yàn)檎蔚拇鎯?chǔ)空間就那么大,但是字符串可以無限大,所以就算不算數(shù)據(jù)部分,對(duì)于比較長的字符串最后也會(huì)把整型給撐爆,long long也不行,解決方法就是先將這一次要加的0記起來然后等要計(jì)算這次字符串相加時(shí)也就是把整型轉(zhuǎn)換為了字符串時(shí)再補(bǔ)上這一次的0.
  2. 不能先將其中一個(gè)字符串轉(zhuǎn)換為整型然后只用一層for循環(huán)對(duì)另一個(gè)字符串的數(shù)據(jù)進(jìn)行遍歷相加,就算是long long也接收不了每次這么大的整型,必須用兩層for循環(huán)分別讓兩個(gè)數(shù)的每位相乘完立即相加到字符串上。

給定兩個(gè)以字符串形式表示的非負(fù)整數(shù) num1 和 num2,返回 num1 和 num2 的乘積,它們的乘積也表示為字符串形式。
注意:不能使用任何內(nèi)置的 BigInteger 庫或直接將輸入轉(zhuǎn)換為整數(shù)。
示例 1:
輸入: num1 = “2”, num2 = “3”
輸出: “6”
示例 2:
輸入: num1 = “123”, num2 = “456”
輸出: “56088”
提示:
1 <= num1.length, num2.length <= 200
num1 和 num2 只能由數(shù)字組成。
num1 和 num2 都不包含任何前導(dǎo)零,除了數(shù)字0本身。

class add {
public:
    string addStrings(string num1, string num2) {
        string s;
        int n1 = 0, n2 = 0;
        int flag = 0;
        int sum = 0;
        if (num1.size() == 0)
            return num2;
        else if (num2.size() == 0)
            return num1;
        string::iterator cur1 = num1.end() - 1;
        string::iterator cur2 = num2.end() - 1;
        while (cur1 >= num1.begin() || cur2 >= num2.begin())
        {
            n1 = cur1 >= num1.begin() ? *cur1 - '0' : 0;
            n2 = cur2 >= num2.begin() ? *cur2 - '0' : 0;//等到越界的時(shí)候也沒事,因?yàn)槿坎僮鞣麜?huì)選擇性執(zhí)行,只會(huì)去比那塊的地址,不會(huì)訪問進(jìn)去。
            sum = n1 + n2 + flag;
            flag = 0;
            if (sum > 9)
            {
                flag = 1;
                sum -= 10;
            }
            s += sum + '0';
            cur1--;
            cur2--;
        }
        if (flag)
            s += 1 + '0';
        reverse(s.begin(), s.end());
        return s;
    }
};

class Solution {
public:
    string multiply(string num1, string num2) {
        if (num1 == string("0") || num2 == "0")
            return string("0");
        string s;
        long long num1_tmp = 0;
        long long num2_tmp = 0;
        //不能一下子讓num1變?yōu)檎麛?shù),因?yàn)榫退闶莑ong long 也存不下,所以要套兩層循環(huán),讓它們每個(gè)位都相乘
        // for (auto x : num1)
        // {
        //     cout << (x - '0') << ' ';
        //     s_num1 += (x - '0') * pow(10, num1.size() - 1 - system++);
        //     cout << s_num1 << endl;
        // }
        // cout << s_num1 << endl;
        int system1 = 0;
        int system2 = 0;
        string::iterator it1 = num1.end() - 1;

        while(it1 >= num1.begin())
        {
            system2 = 0;
            string product_s;
            num1_tmp = *it1 - '0';
            string::iterator it2 = num2.end() - 1;
            while(it2 >= num2.begin())
            {
                int system = system1 + system2;
                int product = 0;
                num2_tmp = *it2 - '0';
                product = num1_tmp * num2_tmp;
                while (product > 9)
                {
                    int n = product % 10;
                    product_s += n + '0';
                    product /= 10;
                }
                product_s += product + '0';
                reverse(product_s.begin(), product_s.end());
                for(int i = 0; i < system; i++)
                    product_s += '0';
                
                // cout << s << endl;
                // cout << product_s << endl;
                s = add().addStrings(s,product_s);
                // cout << s << endl;
                product_s.clear();
                system2++;
                it2--;
            }
            system1++;
            it1--;
        }
        return s;
    }
};
  • 博主長期更新,博主的目標(biāo)是不斷提升閱讀體驗(yàn)和內(nèi)容質(zhì)量,如果你喜歡博主的文章,請(qǐng)點(diǎn)個(gè)贊或者關(guān)注博主支持一波,我會(huì)更加努力的為你呈現(xiàn)精彩的內(nèi)容。

??專欄推薦
??魔王的修煉之路–C語言
??魔王的修煉之路–數(shù)據(jù)結(jié)構(gòu)初階
??魔王的修煉之路–C++
??魔王的修煉之路–Linux
更新不易,希望得到友友的三連支持一波。收藏這篇文章,意味著你將永久擁有它,無論何時(shí)何地,都可以立即找到重新閱讀;關(guān)注博主,意味著無論何時(shí)何地,博主將永久和你一起學(xué)習(xí)進(jìn)步,為你帶來有價(jià)值的內(nèi)容。

LeetCode —— 43. 字符串相乘,力扣題目匯總,leetcode,算法,c++文章來源地址http://www.zghlxwxcb.cn/news/detail-829533.html

到了這里,關(guān)于LeetCode —— 43. 字符串相乘的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • 小白水平理解面試經(jīng)典題目LeetCode 594 最大和諧字符串

    小白水平理解面試經(jīng)典題目LeetCode 594 最大和諧字符串

    這道題屬于字符串類型題目,解決的辦法還是有很多的,暴力算法,二分法,雙指針等等。 和諧數(shù)組是指一個(gè)數(shù)組里元素的最大值和最小值之間的差別 正好是 1 。 現(xiàn)在,給你一個(gè)整數(shù)數(shù)組 nums ,請(qǐng)你在所有可能的子序列中找到最長的和諧子序列的長度。 數(shù)組的子序列是一個(gè)

    2024年01月23日
    瀏覽(29)
  • ?LeetCode解法匯總344. 反轉(zhuǎn)字符串

    https://github.com/September26/java-algorithms 編寫一個(gè)函數(shù),其作用是將輸入的字符串反轉(zhuǎn)過來。輸入字符串以字符數(shù)組? s ?的形式給出。 不要給另外的數(shù)組分配額外的空間,你必須 原地修改輸入數(shù)組 、使用 O(1) 的額外空間解決這一問題。 示例 1: 示例 2: 提示: 1 = s.length = 105

    2024年02月14日
    瀏覽(23)
  • 【leetcode 力扣刷題】字符串翻轉(zhuǎn)合集(全部反轉(zhuǎn)///部分反轉(zhuǎn))

    【leetcode 力扣刷題】字符串翻轉(zhuǎn)合集(全部反轉(zhuǎn)///部分反轉(zhuǎn))

    題目鏈接:344. 反轉(zhuǎn)字符串 題目內(nèi)容: 題目中重點(diǎn)強(qiáng)調(diào)了必須 原地修改 輸入數(shù)組,即不能新建一個(gè)數(shù)組來完成字符串的反轉(zhuǎn)。我們注意到: 原來下標(biāo)為0的,反轉(zhuǎn)后是size - 1【原來下標(biāo)是size - 1的,反轉(zhuǎn)后是0】; 原來下標(biāo)是1的,反轉(zhuǎn)后是size - 2【原來下標(biāo)是size -2的,反轉(zhuǎn)后

    2024年02月11日
    瀏覽(33)
  • 【leetcode 力扣刷題】字符串匹配之經(jīng)典的KMP?。?!

    【leetcode 力扣刷題】字符串匹配之經(jīng)典的KMP?。?!

    以下是能用KMP求解的算法題,KMP是用于字符串匹配的經(jīng)典算法【至今沒學(xué)懂………啊啊啊】 題目鏈接:28. 找出字符串中第一個(gè)匹配項(xiàng)的下標(biāo) 題目內(nèi)容: 題意還是很好理解的,要在字符串haystack中查找一個(gè)完整的needle,即字符串匹配。 暴力求解就是用 兩層循環(huán) :haystack從第

    2024年02月09日
    瀏覽(31)
  • 【每日撓頭算法(4)】字符串相加|字符串相乘

    【每日撓頭算法(4)】字符串相加|字符串相乘

    點(diǎn)我直達(dá)~ 1.將兩個(gè)字符串從右往左開始進(jìn)行相加,使用一個(gè)變量 ans 表示進(jìn)位,如果兩個(gè)字符串的個(gè)位加法和大于10,那么讓進(jìn)位+1,個(gè)位和再%10,然后將結(jié)果存入到新的字符串 strRet 中 2.兩個(gè)字符串的十位和十位繼續(xù)相加,并且需要加上個(gè)位的進(jìn)位 ans ,步驟同1 3.這樣不斷相

    2024年02月09日
    瀏覽(26)
  • ?LeetCode解法匯總2496. 數(shù)組中字符串的最大值

    https://github.com/September26/java-algorithms 一個(gè)由字母和數(shù)字組成的字符串的? 值 ?定義如下: 如果字符串? 只 ?包含數(shù)字,那么值為該字符串在? 10 ?進(jìn)制下的所表示的數(shù)字。 否則,值為字符串的? 長度? 。 給你一個(gè)字符串?dāng)?shù)組? strs ?,每個(gè)字符串都只由字母和數(shù)字組成,請(qǐng)你

    2024年02月10日
    瀏覽(27)
  • ?LeetCode解法匯總2645. 構(gòu)造有效字符串的最少插入數(shù)

    https://github.com/September26/java-algorithms 給你一個(gè)字符串? word ?,你可以向其中任何位置插入 \\\"a\\\"、\\\"b\\\" 或 \\\"c\\\" 任意次,返回使? word ? 有效 ?需要插入的最少字母數(shù)。 如果字符串可以由 \\\"abc\\\" 串聯(lián)多次得到,則認(rèn)為該字符串? 有效 ?。 示例 1: 示例 2: 示例 3: 提示: 1 = word.lengt

    2024年01月17日
    瀏覽(24)
  • 如何高效解決“字符串相乘“問題?

    如何高效解決“字符串相乘“問題?

    ??個(gè)人主頁:?? :???初階牛??? ??推薦專欄1: ??????C語言初階 ??推薦專欄2: ??????C語言進(jìn)階 ??個(gè)人信條: ??知行合一 金句分享: ?你要狠下心來去努力,努力變成一個(gè)很厲害的人.? 本題牛牛寫了很久,起初對(duì)每次相乘的結(jié)果就進(jìn)位處理了,最后還需要考慮 錯(cuò)位相

    2024年02月12日
    瀏覽(19)
  • 【string題解 C++】字符串相乘 | 翻轉(zhuǎn)字符串III:翻轉(zhuǎn)單詞

    【string題解 C++】字符串相乘 | 翻轉(zhuǎn)字符串III:翻轉(zhuǎn)單詞

    目錄 字符串相乘 題面 錯(cuò)誤記錄 Way1 拆分成“先乘后加” 思路 實(shí)現(xiàn) 時(shí)空復(fù)雜度分析 反思 Way2 用數(shù)組 思路 實(shí)現(xiàn) 時(shí)空復(fù)雜度分析 翻轉(zhuǎn)字符串III:翻轉(zhuǎn)字符串中的單詞 題面 錯(cuò)誤記錄 思路1 遍歷找單詞 實(shí)現(xiàn) 思路2 暴力解法 實(shí)現(xiàn) 力扣(LeetCode)官網(wǎng) - 全球極客摯愛的技術(shù)成長平

    2024年02月07日
    瀏覽(21)
  • 算法學(xué)習(xí)——LeetCode力扣補(bǔ)充篇11(64. 最小路徑和、48. 旋轉(zhuǎn)圖像 、169. 多數(shù)元素、394. 字符串解碼、240. 搜索二維矩陣 II )

    算法學(xué)習(xí)——LeetCode力扣補(bǔ)充篇11(64. 最小路徑和、48. 旋轉(zhuǎn)圖像 、169. 多數(shù)元素、394. 字符串解碼、240. 搜索二維矩陣 II )

    64. 最小路徑和 - 力扣(LeetCode) 描述 給定一個(gè)包含非負(fù)整數(shù)的 m x n 網(wǎng)格 grid ,請(qǐng)找出一條從左上角到右下角的路徑,使得路徑上的數(shù)字總和為最小。 說明:每次只能向下或者向右移動(dòng)一步。 示例 示例 1: 輸入:grid = [[1,3,1],[1,5,1],[4,2,1]] 輸出:7 解釋:因?yàn)槁窂?1→3→1→

    2024年04月23日
    瀏覽(31)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包