Leetcode # 43. Multiply Strings
- 2023.07.24
- ★★ Medium Big Number Can Be Better LeetCode Mathematics
https://leetcode.com/problems/multiply-strings
First Solution
M := len(num1)
N := len(num2)
Time Complexity: O(M * N + N * (M + N)) = O(M * N + N ** 2)
Space Complexity: O(N * (M + N))
(若在長乘法乘算途中即做加法,便無須保留已計算完畢的數字)
(The input and output generally do not count towards the space complexity.)
class Solution:
def multiply(self, num1: str, num2: str) -> str:
multiplication_results = []
if num1 == "0" or num2 == "0":
return "0"
for i, c2 in enumerate(num2[::-1]):
if c2 == "0":
continue
multiplication_results.append("")
carry = 0
for c1 in num1[::-1]:
d2 = ord(c2) - 48
d1 = ord(c1) - 48
d2_multiply_d1 = d2 * d1 + carry
multiplication_results[-1] = chr(d2_multiply_d1 % 10 + 48) \
+ multiplication_results[-1]
carry = d2_multiply_d1 // 10
if carry > 0:
multiplication_results[-1] = chr(carry + 48) \
+ multiplication_results[-1]
multiplication_results[-1] += "0" * i
result = ""
carry = 0
for i in range(len(multiplication_results[-1])):
digit_sum = carry
carry = 0
for k in range(len(multiplication_results)):
rk = multiplication_results[k]
if i >= len(rk) or rk[len(rk) - i - 1] == "0":
continue
digit_sum += ord(rk[len(rk) - i - 1]) - 48
result = chr(digit_sum % 10 + 48) + result
carry = digit_sum // 10
if carry > 0:
result = chr(carry + 48) + result
return result
Last Updated on 2023/08/16 by A1go