給定兩個以字串形式表示的非負整數 num1 和 num2,返回 num1 和 num2 的乘積,它們的乘積也表示為字串形式。
之前做過乙個字串加法的。當然乘法的複雜度遠遠高於加法。
我們算乘法,是寫豎式的。
上面這個豎式和我們平時列的還不太一樣,但這樣列更加容易程式設計實現。
解釋一下,用乙個陣列res儲存num2中的乙個字元和num1所有字元的乘積;然後得到的結果,綜合一下之前的計算結果。
class
solution
:def
multiply
(self, num1:
str, num2:
str)
->
str:
m, n =
len(num1)
,len
(num2)
res =[0
]*(m+n)
for i in
range
(m-1,-
1,-1
):for j in
range
(n-1,-
1,-1
):mul =
(ord
(num1[i])-
ord(
'0'))*
(ord
(num2[j])-
ord(
'0')
) p2 = i+j+
1# 個位(在數值中較高的位置)
p1 = i+j # 十位(在陣列中較低的位置)
temp = mul + res[p2]
# 綜合j之前的計算結果
res[p2]
= temp %
10 res[p1]
+= temp //
10# 進製 用+=
index =
0# 去除掉開頭的0 如果有的話
while index <
(m+n)
and res[index]==0
: index +=
1if index ==
(m+n)
:return
'0'# 按順序拼接
ans =
''.join(
str(i)
for i in res[index:])
return ans
LeetCode43 字串相乘
給定兩個以字串形式表示的非負整數num1和num2,返回num1和num2的乘積,它們的乘積也表示為字串形式。示例 1 輸入 num1 2 num2 3 輸出 6 示例 2 輸入 num1 123 num2 456 輸出 56088 題目分析 如果兩個字串中有乙個為0,則結果是0 否則的話,將其中乙...
LeetCode43字串相乘
給定兩個以字串形式表示的非負整數num1和num2,返回num1和num2的乘積,它們的乘積也表示為字串形式。示例 1 輸入 num1 2 num2 3 輸出 6 示例 2 輸入 num1 123 num2 456 輸出 56088 說明 num1和num2的長度小於110。num1和num2只包含...
leetcode43 字串相乘
給定兩個以字串形式表示的非負整數 num1 和 num2,返回 num1 和 num2 的乘積,它們的乘積也表示為字串形式。示例 1 輸入 num1 2 num2 3 輸出 6 示例 2 輸入 num1 123 num2 456 輸出 56088 說明 num1 和 num2 的長度小於110。nu...