43. Multiply Strings
題目網址:https://leetcode.cn/problems/multiply-strings/
題意:給兩個以 string 表示的非負整數
num1
和num2
, 返回num1
和num2
的乘積 (以 string 表示)。注意:不得使用任何內建的 BigInteger library 或是 直接將 input string 轉換為整數。
Solution:
想法:利用大數乘法, 用整數 array
digits
來儲存乘積e.g.
num1 = "123"
,num2 = "45"
- 令每個數最左邊的數
idx = 0
, 每往右一位idx + 1
,digits
最左邊的 idx 也為 0
num1
中2
的idx = 1
num2
中4
的idx = 0
- 若
num1.size() = m
,num2.size() = n
, 則digits.size() = m + n
- 若
num1
和num2
都取最小值, 則num1
為, num2
為
➔num1 x num2
為, 因此乘積的長度 = m + n - 1
- 若
num1
和num2
都取最大值, 則num1
為, num2
為
➔num1 x num2
為
➔< 乘積 < , 因此乘積的長度 = m + n
- 由上述得知
num1 x num2
的長度最多為m + n
num1
中2
的idx = 1
, 和num2
中4
的idx = 0
, 計算出來的08
會在digits
的 index 為[i + j, i + j + 1]
的區間- 計算
digits
是先計算idx = i + j + 1
, 因為i + j + 1
較靠右 (平時我們做乘法加總時的順序), 然後才讓靠左的i + j
加總carry
- 下圖
123 x 45
會得出digits
為05535
- 要先去掉左邊開頭為 0 的部分 (leading zero)
- 再把剩餘的部分轉成 string, 得到
5535
cpp
class Solution { |
- time:
➔ for loop - space:
➔digits
本部落格所有文章除特別聲明外,均採用 CC BY-NC-SA 4.0 許可協議。轉載請註明來自 Zako's Blog!
評論