最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

 更新時(shí)間:2021年07月15日 14:24:43   作者:Grandyang  
這篇文章主要介紹了C++實(shí)現(xiàn)LeetCode(43.字符串相乘),本篇文章通過(guò)簡(jiǎn)要的案例,講解了該項(xiàng)技術(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.

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

8 9  <- num2

    7 6  <- num1

-------

    5 4

  4 8

  6 3

5 6

-------

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

由于要從個(gè)位上開(kāi)始相乘,所以從 num1 和 num2 字符串的尾部開(kāi)始往前遍歷,分別提取出對(duì)應(yīng)位置上的字符,將其轉(zhuǎn)為整型后相乘。然后確定相乘后的兩位數(shù)所在的位置 p1 和 p2,由于 p2 相較于 p1 是低位,所以將得到的兩位數(shù) mul 先加到 p2 位置上去,這樣可能會(huì)導(dǎo)致 p2 位上的數(shù)字大于9,所以將十位上的數(shù)字要加到高位 p1 上去,只將余數(shù)留在 p2 位置,這樣每個(gè)位上的數(shù)字都變成一位。然后要做的是從高位開(kāi)始,將數(shù)字存入結(jié)果 res 中,記住 leading zeros 要跳過(guò),最后處理下 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++實(shí)現(xiàn)LeetCode(43.字符串相乘)的文章就介紹到這了,更多相關(guān)C++實(shí)現(xiàn)字符串相乘內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 基于C語(yǔ)言實(shí)現(xiàn)2048游戲

    基于C語(yǔ)言實(shí)現(xiàn)2048游戲

    這篇文章主要為大家詳細(xì)介紹了基于C語(yǔ)言實(shí)現(xiàn)2048游戲,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-10-10
  • 簡(jiǎn)要對(duì)比C語(yǔ)言中的setgid()函數(shù)和setregid()函數(shù)

    簡(jiǎn)要對(duì)比C語(yǔ)言中的setgid()函數(shù)和setregid()函數(shù)

    這篇文章主要介紹了C語(yǔ)言中的setgid()函數(shù)和setregid()函數(shù)的簡(jiǎn)要對(duì)比,是C語(yǔ)言入門(mén)學(xué)習(xí)中的基礎(chǔ)知識(shí),需要的朋友可以參考下
    2015-08-08
  • C/C++中線程基本概念與創(chuàng)建詳解

    C/C++中線程基本概念與創(chuàng)建詳解

    線程是在進(jìn)程中產(chǎn)生的一個(gè)執(zhí)行單元,是CPU調(diào)度和分配的最小單元,其在同一個(gè)進(jìn)程中與其他線程并行運(yùn)行,他們可以共享進(jìn)程內(nèi)的資源。本文就和大家一起聊聊線程基本概念以及如何創(chuàng)建多線程,需要的可以參考一下
    2022-09-09
  • VC++的if語(yǔ)句應(yīng)用范圍分析

    VC++的if語(yǔ)句應(yīng)用范圍分析

    這篇文章主要介紹了VC++的if語(yǔ)句應(yīng)用范圍分析,對(duì)VC++初學(xué)者有很好的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2014-08-08
  • vscode?采用C++17版本進(jìn)行編譯的實(shí)現(xiàn)

    vscode?采用C++17版本進(jìn)行編譯的實(shí)現(xiàn)

    本文主要介紹了vscode?采用C++17版本進(jìn)行編譯,文中通過(guò)示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-01-01
  • strncpy與snprintf 的用法比較

    strncpy與snprintf 的用法比較

    以下是對(duì)strncpy與snprintf的具體用法以及區(qū)別進(jìn)行了詳細(xì)的分析介紹,需要的朋友可以過(guò)來(lái)參考下
    2013-07-07
  • C++ Boost Heap使用實(shí)例詳解

    C++ Boost Heap使用實(shí)例詳解

    Boost是為C++語(yǔ)言標(biāo)準(zhǔn)庫(kù)提供擴(kuò)展的一些C++程序庫(kù)的總稱。Boost庫(kù)是一個(gè)可移植、提供源代碼的C++庫(kù),作為標(biāo)準(zhǔn)庫(kù)的后備,是C++標(biāo)準(zhǔn)化進(jìn)程的開(kāi)發(fā)引擎之一,是為C++語(yǔ)言標(biāo)準(zhǔn)庫(kù)提供擴(kuò)展的一些C++程序庫(kù)的總稱
    2022-11-11
  • C語(yǔ)言計(jì)算1/1+1/2+1/3+…+1/n的問(wèn)題

    C語(yǔ)言計(jì)算1/1+1/2+1/3+…+1/n的問(wèn)題

    這篇文章主要介紹了C語(yǔ)言計(jì)算1/1+1/2+1/3+…+1/n的問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-11-11
  • 解析c中stdout與stderr容易忽視的一些細(xì)節(jié)

    解析c中stdout與stderr容易忽視的一些細(xì)節(jié)

    本篇文章是對(duì)在c語(yǔ)言中stdout與stderr容易忽視的一些細(xì)節(jié)進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下
    2013-05-05
  • C++實(shí)現(xiàn)求動(dòng)態(tài)矩陣各元素的和

    C++實(shí)現(xiàn)求動(dòng)態(tài)矩陣各元素的和

    這篇文章主要為大家詳細(xì)介紹了C++實(shí)現(xiàn)求動(dòng)態(tài)矩陣各元素的和,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-10-10

最新評(píng)論

会同县| 江城| 金堂县| 唐山市| 瓦房店市| 佛学| 松滋市| 达日县| 应用必备| 怀宁县| 通渭县| 巨野县| 明水县| 寻乌县| 历史| 刚察县| 乌审旗| 永定县| 武胜县| 益阳市| 贵南县| 娄底市| 昌平区| 沐川县| 连平县| 曲松县| 繁峙县| 五大连池市| 西乡县| 乐安县| 弥渡县| 阜平县| 抚顺市| 象山县| 兴和县| 嫩江县| 晋江市| 东安县| 广水市| 大田县| 浦城县|