今日簽到題,簽到題如下:
給定兩個以字串形式表示的非負整數 num1 和 num2,返回 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)或直接將輸入轉換為整數來處理。
複雜度分析引用官方題解:
以下為自己提交的**:
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...