LeetCode 41字符串相乘

LeetCode 41字符串相乘

解題思路:
  1. 本題要求兩個字符串數字相乘,顯然是個大數乘法的題,結果用一個int類型數組表示。
  2. 首先判斷特殊情況,既某一個數字爲0。如果出現,直接返回字符串 “0”
  3. 如果結果非0,則將兩個字符串翻轉,這是因爲要按照人類的思維習慣進行乘法,既從個位開始,如果不反轉,第一位取的不是個位,而是最高位。
  4. 翻轉之後,採用惰性存儲法,我們不考慮進位問題,等到後面合併的時候統一考慮進位,現在僅僅將每個乘法的結果錯位相乘,那麼怎麼錯位相乘呢?
    (1) . 首先,定義一個index索引,記錄當前相乘的結果應該從哪裏開始相加,因爲是錯位,所以要從當前的 i 開始累加,直接相加就行,不用考慮進位問題
  5. 最後每個results數組裏應該保存了每一位對應的結果,然後我們開始考慮進位問題。
    (1) . 定義一個變量 cal_next 初始值設爲0,用來記錄本次到下一數字的進位。
    (2) . 將本次的值直接於cal_next相加,將結果除10 用來計算下一次cal_next的值
    (3) . 再將results中當前的值%10,將當前的位置的值替換掉
  6. 現在開始將字符串進行合併,一定要注意,是從尾巴向前合併,在合併當中,最重要的就是頭部去0,由於不知道最後結果長度是多少,所以直接定義最大長度str_len = num1.length() + num2.length()然後再合併的步驟中,增加判斷i==0 && results[str_len-i-1] == 0用來判斷頭部是否爲0
源代碼:
class Solution {
private:
    int results[250] = {0};
public:
    string multiply(string num1, string num2) {
        int i,j,index = 0;
        int mul1,mul2;
        string Results = "";
        if((num1.length() == 1 && num1[0] - '0' == 0) || (num2.length() == 1 && num2[0] - '0' == 0)){
            return "0";
        }
        reverse(num1.begin(),num1.end());
        reverse(num2.begin(),num2.end());
        for(i=0;i<num1.length();i++){
            index = i;
            mul1 = num1[i] - '0';
            for(j=0;j<num2.length();j++){
                mul2 = num2[j] - '0';
                results[index] += (mul1*mul2);
                index ++;
            }
        }
        int str_len = num1.length() + num2.length(),real_len = 0;
        int cal_next = 0;
        for(i=0;i<str_len;i++){
            real_len ++ ;
            results[i] += cal_next;
            cal_next = results[i] / 10;
            results[i] = results[i] % 10;
        }
        char currentStr;
        for(i=0;i<real_len;i++){
            if(i==0 && results[real_len-i-1] == 0){
                continue;
            }
        	char currentStr = results[real_len-i-1] + '0';
        	//itoa(results[real_len-i-1],currentStr,10);
            Results += currentStr;
        }
        return Results;
    }
};
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章