欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

C++實現(xiàn)LeetCode(43.字符串相乘)

 更新時間:2021年07月15日 14:24:43   作者:Grandyang  
這篇文章主要介紹了C++實現(xiàn)LeetCode(43.字符串相乘),本篇文章通過簡要的案例,講解了該項技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下

[LeetCode] 43. Multiply Strings 字符串相乘

Given two non-negative integers num1 and num2represented as strings, return the product of num1 and num2, also represented as a string.

Example 1:

Input: num1 = "2", num2 = "3"
Output: "6"

Example 2:

Input: num1 = "123", num2 = "456"
Output: "56088"

Note:

  1. The length of both num1 and num2 is < 110.
  2. Both num1 and num2 contain only digits 0-9.
  3. Both num1 and num2 do not contain any leading zero, except the number 0 itself.
  4. You must not use any built-in BigInteger libraryor convert the inputs to integer directly.

這道題讓我們求兩個字符串?dāng)?shù)字的相乘,輸入的兩個數(shù)和返回的數(shù)都是以字符串格式儲存的,這樣做的原因可能是這樣可以計算超大數(shù)相乘,可以不受 int 或 long 的數(shù)值范圍的約束,那么該如何來計算乘法呢,小時候都學(xué)過多位數(shù)的乘法過程,都是每位相乘然后錯位相加,那么這里就是用到這種方法,舉個例子,比如 89 x 76,那么根據(jù)小學(xué)的算術(shù)知識,不難寫出計算過程如下:

8 9  <- num2

    7 6  <- num1

-------

    5 4

  4 8

  6 3

5 6

-------

如果自己再寫些例子出來,不難發(fā)現(xiàn),兩數(shù)相乘得到的乘積的長度其實其實不會超過兩個數(shù)字的長度之和,若 num1 長度為m,num2 長度為n,則 num1 x num2 的長度不會超過 m+n,還有就是要明白乘的時候為什么要錯位,比如6乘8得到的 48 為啥要跟6乘9得到的 54 錯位相加,因為8是十位上的數(shù)字,其本身相當(dāng)于80,所以錯開的一位實際上末尾需要補(bǔ)的0。還有一點需要觀察出來的就是,num1 和 num2 中任意位置的兩個數(shù)字相乘,得到的兩位數(shù)在最終結(jié)果中的位置是確定的,比如 num1 中位置為i的數(shù)字乘以 num2 中位置為j的數(shù)字,那么得到的兩位數(shù)字的位置為 i+j 和 i+j+1,明白了這些后,就可以進(jìn)行錯位相加了,累加出最終的結(jié)果。

由于要從個位上開始相乘,所以從 num1 和 num2 字符串的尾部開始往前遍歷,分別提取出對應(yīng)位置上的字符,將其轉(zhuǎn)為整型后相乘。然后確定相乘后的兩位數(shù)所在的位置 p1 和 p2,由于 p2 相較于 p1 是低位,所以將得到的兩位數(shù) mul 先加到 p2 位置上去,這樣可能會導(dǎo)致 p2 位上的數(shù)字大于9,所以將十位上的數(shù)字要加到高位 p1 上去,只將余數(shù)留在 p2 位置,這樣每個位上的數(shù)字都變成一位。然后要做的是從高位開始,將數(shù)字存入結(jié)果 res 中,記住 leading zeros 要跳過,最后處理下 corner case,即若結(jié)果 res 為空,則返回 "0",否則返回結(jié)果 res,代碼如下:

class Solution {
public:
    string multiply(string num1, string num2) {
        string res = "";
        int m = num1.size(), n = num2.size();
        vector<int> vals(m + n);
        for (int i = m - 1; i >= 0; --i) {
            for (int j = n - 1; j >= 0; --j) {
                int mul = (num1[i] - '0') * (num2[j] - '0');
                int p1 = i + j, p2 = i + j + 1, sum = mul + vals[p2];
                vals[p1] += sum / 10;
                vals[p2] = sum % 10;
            }
        }
        for (int val : vals) {
            if (!res.empty() || val != 0) res.push_back(val + '0');
        }
        return res.empty() ? "0" : res;
    }
};

到此這篇關(guān)于C++實現(xiàn)LeetCode(43.字符串相乘)的文章就介紹到這了,更多相關(guān)C++實現(xiàn)字符串相乘內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • c++中的stack和dequeue解析

    c++中的stack和dequeue解析

    這篇文章主要介紹了c++中的stack和dequeue介紹,本文通過實例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2023-05-05
  • 詳解C++編程中斷言static_assert的使用

    詳解C++編程中斷言static_assert的使用

    這篇文章主要介紹了C++編程中斷言static_assert的使用,斷言在debug時非常有用,是C++入門學(xué)習(xí)中的基礎(chǔ)知識,需要的朋友可以參考下
    2016-01-01
  • opencv?C++模板匹配的簡單實現(xiàn)

    opencv?C++模板匹配的簡單實現(xiàn)

    這篇文章主要介紹了opencv?C++模板匹配的簡單實現(xiàn),本文通過實例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-02-02
  • C++缺省參數(shù)的理解

    C++缺省參數(shù)的理解

    這篇文章主要為大家介紹了C++缺省參數(shù),具有一定的參考價值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助
    2021-12-12
  • C/C++實現(xiàn)圖形學(xué)掃描線填充算法

    C/C++實現(xiàn)圖形學(xué)掃描線填充算法

    這篇文章主要介紹了C/C++實現(xiàn)圖形學(xué)掃描線填充算法,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-04-04
  • C++實現(xiàn)下載的代碼

    C++實現(xiàn)下載的代碼

    這篇文章主要介紹了C++實現(xiàn)下載的代碼,以下載百度圖片為例較為完整的講述了C++下載的具體實現(xiàn)方法,需要的朋友可以參考下
    2014-10-10
  • C++通過CryptoPP計算Hash值的過程詳解

    C++通過CryptoPP計算Hash值的過程詳解

    Crypto++ (CryptoPP) 是一個用于密碼學(xué)和加密的C++庫,它是一個開源項目,提供了大量的密碼學(xué)算法和功能,本文小編給大家介紹了C++通過CryptoPP計算Hash值的過程,文中通過代碼示例給大家介紹的非常詳細(xì),需要的朋友可以參考下
    2023-11-11
  • C++/Qt遍歷多維數(shù)組的3種方式示例

    C++/Qt遍歷多維數(shù)組的3種方式示例

    一維數(shù)組對于存儲和處理一組數(shù)據(jù)很有用,但有時候,有必要使用多維數(shù)組,下面這篇文章主要給大家介紹了關(guān)于C++/Qt遍歷多維數(shù)組的3種方式,文中通過實例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2023-05-05
  • C語言實現(xiàn)大數(shù)據(jù)文件的內(nèi)存映射機(jī)制

    C語言實現(xiàn)大數(shù)據(jù)文件的內(nèi)存映射機(jī)制

    這篇文章主要介紹了C語言實現(xiàn)大數(shù)據(jù)文件的內(nèi)存映射機(jī)制的相關(guān)資料,需要的朋友可以參考下
    2017-01-01
  • C語言中各種運算類型全面總結(jié)

    C語言中各種運算類型全面總結(jié)

    C語言運算符是說明特定操作的符號,它是構(gòu)造C語言表達(dá)式的工具,C語言的運算異常豐富,除了控制語句和輸入輸出以外的幾乎所有的基本操作都為運算符處理
    2022-04-04

最新評論