力扣刷題筆記 43 字串相乘 C

2021-10-09 03:34:53 字數 1547 閱讀 2575

今日簽到題,簽到題如下:

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

示例 1:

輸入: num1 = "2", num2 = "3"

輸出: "6"

示例 2:

輸入: num1 = "123", num2 = "456"

輸出: "56088"

說明:num1 和 num2 的長度小於110。

num1 和 num2 只包含數字 0-9。

num1 和 num2 均不以零開頭,除非是數字 0 本身。

不能使用任何標準庫的大數型別(比如 biginteger)或直接將輸入轉換為整數來處理。

之前做過字串相加,所以首先想法是將 num1 和 num2 的字元逐個相乘得到字串,然後把這些字串相加,得到最終結果。

複雜度分析引用官方題解:

以下為自己提交的**:

public class solution 

if (add > 0) tempresult = add.tostring() + tempresult;

result = add(result,tempresult + zero);

zero += "0";

}return result;

}private string add(string num1,string num2)

if (add > 0) ret = add.tostring() + ret;

return ret;}}

提交之後發現效率十分低下:

還是看官方題解,題解提供的另乙個思路效率明顯較高。該思路拆解了字元逐個相乘這一步,先把每個字元相乘的結果用整型陣列 numarr 儲存,其內容為結果從個位開始逆序排列。numarr 元素可能出現由於多次相加導致大於 10,沒有關係,最終相加的時候也進行進製操作就可以了。

如果使用字串相加,要反覆遍歷較大長度的字串多次,本方法中避免了這種相加,大大提高效率。

複雜度分析引用官方題解:

以下為自己提交的**:

public class solution 

}string result = "";

for (int i = numarr.length - 1; i > 0; i--)

if (numarr[0] != 0) result = (char)(numarr[0] % 10 + 48) + result;

return result;}}

力扣 43 字串相乘

給定兩個以字串形式表示的非負整數 num1 和 num2,返回 num1 和 num2 的乘積,它們的乘積也表示為字串形式。示例 1 輸入 num1 2 num2 3 輸出 6 示例 2 輸入 num1 123 num2 456 輸出 56088 說明 num1 和 num2 的長度小於110。nu...

LeetCode刷題筆記 43 字串相乘

給定兩個以字串形式表示的非負整數 num1 和 num2,返回 num1 和 num2 的乘積,它們的乘積也表示為字串形式。示例 1 輸入 num1 123 num2 456 輸出 56088 sdc1是sdc2的優化 class solution stringbuilder sb newstrin...

43 字串相乘

給定兩個以字串形式表示的非負整數 num1 和 num2,返回 num1 和 num2 的乘積,它們的乘積也表示為字串形式。示例 1 輸入 num1 2 num2 3 輸出 6 示例 2 輸入 num1 123 num2 456 輸出 56088 說明 num1 和 num2 的長度小於110。nu...