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

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

這篇具有很好參考價值的文章主要介紹了如何高效解決“字符串相乘“問題?。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

??個人主頁:?? :???初階牛???
如何高效解決“字符串相乘“問題?,刷題集,c++,c語言,算法>??推薦專欄1: ??????C語言初階
??推薦專欄2: ??????C語言進階
??個人信條: ??知行合一
金句分享:
?你要狠下心來去努力,努力變成一個很厲害的人.?

前言

本題牛牛寫了很久,起初對每次相乘的結(jié)果就進位處理了,最后還需要考慮錯位相加,進行補0等,花了半天也沒搞出來.
所幸學到了一種高效且相對簡單的方法解決此題,希望對友友們有所幫助.
如何高效解決“字符串相乘“問題?,刷題集,c++,c語言,算法

一、字符串相乘

題目介紹

給定兩個以字符串形式表示的非負整數(shù) num1 和 num2,返回 num1 和 num2 的乘積,它們的乘積也表示為字符串形式。

注意:不能使用任何內(nèi)置的 BigInteger 庫或直接將輸入轉(zhuǎn)換為整數(shù)。

示例1:

輸入: num1 = “2”, num2 = “3”
輸出: “6”

示例2:

輸入: num1 = “123”, num2 = “456”
輸出: “56088”

思路分析

如何高效解決“字符串相乘“問題?,刷題集,c++,c語言,算法

  1. 同時從兩個字符串的右邊開始往前遍歷相乘.

  2. num2中的每一個字符依次與與num1中的每個字符想乘.

  3. 將相乘的結(jié)果保存在一個arr數(shù)組中,每個相乘的結(jié)果放入正確的位置(i+J+1).
    如何高效解決“字符串相乘“問題?,刷題集,c++,c語言,算法

  4. arr數(shù)組創(chuàng)建多大的空間?
    一個最小的二位數(shù) × 一個最小的三位數(shù) 結(jié)果是一個四位數(shù)
    10100=1000
    一個最大的二位數(shù) × 一個最大的三位數(shù) 結(jié)果是一個五位數(shù)
    99
    999=98901
    綜上呢,兩個數(shù)相乘,他們的結(jié)果的位數(shù)是[length1 + length2,length1 + length2+1],(0除外哈)
    最高位可能有數(shù)據(jù),也可能沒有數(shù)據(jù).

  5. 為什么正確的位置是i+j+1?
    試著看上圖分析:注意ij都是從右邊往左邊遍歷.
    此處是此解法的難點,通過將每次相乘后的結(jié)果放入正確的位置以實現(xiàn)錯位相加.
    牛牛的理解是:
    j是內(nèi)循環(huán),從右往左遍歷num1,i是外循環(huán),決定的是num2.
    所以用j的變化控制與num1相乘結(jié)果的位置,用i的變化,控制錯位相加(即相乘的結(jié)果要往左移動一位)即num2的位變化.

  6. 對錯位相加后的數(shù)組進行進位處理:從右往左進位
    (1)先保存元素的值,tmp = arr[i]+carry;
    (2)替換為進位后的數(shù)據(jù): arr[i] = (arr[i] + carry) % 10;
    (3)保存進位數(shù): carry = tmp / 10;

  7. 將進位后的數(shù)組中的數(shù)據(jù)依次尾插入amass對象中.
    注意:先判斷第一個位置有沒有有效數(shù)據(jù)(即最高位是否有效)

  8. 最后,處理特殊情況,如果num1和num2中有一個是0,則直接返回0.

代碼實現(xiàn):

class Solution {
public:
    string multiply(string num1, string num2) {
    //處理特殊情況,如果有一方為0,
        if (num1[0] == '0' || num2[0] == '0') return string("0");
        int length1 = num1.size();
        int length2 = num2.size();
        int arr[length1 + length2];
        //將數(shù)組中的元素全部初始化為0
        for (auto& a : arr)
        {
            a = 0;
        }
        string amass;
        //相乘
        //內(nèi)外層循環(huán)控制num2和num1 的次序無所謂
        //版本1
        for (int i = length2 -1; i >= 0; i--){//外層循環(huán)控制num2
            int s1 = num2[i] - '0';
            for (int j = length1 - 1; j >= 0; j--){//內(nèi)存循環(huán)控制num1
                int s2 = num1[j] - '0';
                arr[i+j+1] += s1 * s2;//注意這里是+=
            }
        }
        //版本2
       /*
        for (int i = length1 - 1; i >= 0; i--)
        {
            int s1 = num1[i] - '0';
            for (int j = length2 - 1; j >= 0; j--)
            {
                int s2 = num2[j] - '0';
                arr[i + j + 1] += s1 * s2;//注意這里是+=
            }
        }
    */
        //處理進位問題:
        int carry = 0;
        for (int i = length1 + length2 - 1; i >= 0; i--)
        {
       		int tmp = arr[i]+carry;				//保存當前位置中的元素大小,因為下一句代碼會影響giabarr[j]
            arr[i] = (arr[i] + carry) % 10;       //存放個位數(shù)
            carry = tmp / 10;          			 //存放十位數(shù)(進位數(shù)
        }

        //第一個位置是否有元素,最高位是否有效
        if (arr[0] != 0)
            amass.push_back(arr[0] + '0');
        //
        for (int i = 1; i < length1 + length2; i++)
        {
            amass.push_back(arr[i] + '0');
        }
        return amass;
    }
};

最后,感謝友友們閱讀本篇解題分享,希望這篇文章對您在解決問題過程中有所幫助。在解題過程中,我們需要不斷思考、嘗試、調(diào)整,才能得出正確的解決方案。同時,我們也要記得不斷學習、積累知識和經(jīng)驗,提升自己的能力。最后,祝您在解決問題的道路上越走越遠,不斷成長和進步。
如何高效解決“字符串相乘“問題?,刷題集,c++,c語言,算法文章來源地址http://www.zghlxwxcb.cn/news/detail-653758.html

到了這里,關(guān)于如何高效解決“字符串相乘“問題?的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

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

領(lǐng)支付寶紅包贊助服務器費用

相關(guān)文章

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

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

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

    2024年02月07日
    瀏覽(25)
  • 算法刷題-字符串-左旋轉(zhuǎn)字符串

    反轉(zhuǎn)個字符串還有這么多用處? 力扣題目鏈接 字符串的左旋轉(zhuǎn)操作是把字符串前面的若干個字符轉(zhuǎn)移到字符串的尾部。請定義一個函數(shù)實現(xiàn)字符串左旋轉(zhuǎn)操作的功能。比如,輸入字符串\\\"abcdefg\\\"和數(shù)字2,該函數(shù)將返回左旋轉(zhuǎn)兩位得到的結(jié)果\\\"cdefgab\\\"。 示例 1: 輸入: s = “abcde

    2024年02月09日
    瀏覽(23)
  • 算法刷題-字符串-反轉(zhuǎn)字符串II

    簡單的反轉(zhuǎn)還不夠,我要花式反轉(zhuǎn) 力扣題目鏈接 給定一個字符串 s 和一個整數(shù) k,從字符串開頭算起, 每計數(shù)至 2k 個字符,就反轉(zhuǎn)這 2k 個字符中的前 k 個字符。 如果剩余字符少于 k 個,則將剩余字符全部反轉(zhuǎn)。 如果剩余字符小于 2k 但大于或等于 k 個,則反轉(zhuǎn)前 k 個字符,

    2024年02月09日
    瀏覽(20)
  • 算法刷題-字符串-重復的子字符串

    算法刷題-字符串-重復的子字符串

    KMP算法還能干這個 力扣題目鏈接 給定一個非空的字符串,判斷它是否可以由它的一個子串重復多次構(gòu)成。給定的字符串只含有小寫英文字母,并且長度不超過10000。 示例 1: 輸入: “abab” 輸出: True 解釋: 可由子字符串 “ab” 重復兩次構(gòu)成。 示例 2: 輸入: “aba” 輸出: False 示

    2024年02月09日
    瀏覽(25)
  • 算法刷題-字符串-翻轉(zhuǎn)字符串里的單詞

    綜合考察字符串操作的好題。 力扣題目鏈接 給定一個字符串,逐個翻轉(zhuǎn)字符串中的每個單詞。 示例 1: 輸入: “the sky is blue” 輸出: “blue is sky the” 示例 2: 輸入: \\\" hello world! \\\" 輸出: “world! hello” 解釋: 輸入字符串可以在前面或者后面包含多余的空格,但是反轉(zhuǎn)后的字符不

    2024年02月09日
    瀏覽(29)
  • IDEA java: 常量字符串過長問題解決

    IDEA java: 常量字符串過長問題解決

    Error:(41, 41) java: 常量字符串過長 1、字符串長度過長,導致idea默認使用的javac編譯器編譯不了。 解決辦法: Javac編譯器改為Eclipse編譯器。 File-Settings-Build.Execution,Deployment-Compiler-Java Compiler 旭東怪的個人空間-旭東怪個人主頁-嗶哩嗶哩視頻 嗶哩嗶哩旭東怪的個人空間,提供旭東

    2024年02月11日
    瀏覽(88)
  • 【C語言】字符串---刷題篇

    【C語言】字符串---刷題篇

    Hi,C站的小伙伴們大家好呀!????,歡迎來閱讀我的這一篇 【C語言】字符串基礎(chǔ)刷題篇! 不知你是否和我一樣,在剛剛接觸到這塊的知識時,總是會和這神圣的知識隔著隔著厚厚的一堵墻,迷茫的眼神中總是會露出不理解不理解????(當時的狀態(tài)……) 其實后來我就發(fā)現(xiàn)其實

    2024年02月03日
    瀏覽(18)
  • 【算法刷題之字符串篇】

    【算法刷題之字符串篇】

    編寫一個函數(shù),其作用是將輸入的字符串反轉(zhuǎn)過來。輸入字符串以字符數(shù)組 s 的形式給出。 不要給另外的數(shù)組分配額外的空間,你必須原地修改輸入數(shù)組、使用 O(1) 的額外空間解決這一問題。 1.將 left 指向字符數(shù)組首元素,right 指向字符數(shù)組尾元素。 2.當 left right: 交換 s

    2024年02月10日
    瀏覽(22)
  • 解決因base64字符串過長,報500的問題

    解決因base64字符串過長,報500的問題

    提示:后端用nodejs的express,前端是vue 當上傳的圖片?。╞ase64字符串長度?。r,上傳成功 當上傳的圖片大(base64字符串長度過長)時,上傳失敗,接口報500,服務器也報了一大堆的錯誤。 如果直接把base64字符串復制到數(shù)據(jù)庫發(fā)現(xiàn)報錯,提示數(shù)據(jù)太長,很明顯是因為base64字符

    2024年02月11日
    瀏覽(28)
  • C語言——oj刷題——回文字符串

    問題: 實現(xiàn)一個函數(shù),判斷一個字符串是否為回文字符串。 回文字符串是指正讀和反讀都相同的字符串。例如,\\\"level\\\"、\\\"radar\\\"和\\\"madam\\\"都是回文字符串。 要解決這個問題,我們可以使用兩個指針分別指向字符串的首尾字符,然后逐步向中間移動,同時比較指針所指向的字符是

    2024年02月21日
    瀏覽(39)

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

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

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

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包