原始做法
class Solution:
def multiply(self, num1: str, num2: str) -> str:
if num1 == '0' or num2 == '0':return '0'
sgn = (num1[0] == '-') ^ (num2[0] == '-')
num1 = list(num1[::-1])
num2 = list(num2[::-1])
if num1[-1] == '-':num1.pop()
if num2[-1] == '-':num2.pop()
num1 = list(map(int,num1))
num2 = list(map(int,num2))
res = [0] * 1000
t = 0
for i in range(len(num1)):
for j in range(len(num2)):
res[i + j] += num1[i] * num2[j] + t
t = res[i + j] // 10
res[i + j] %= 10
res[i + len(num2)] += t
t = 0
res = list(map(str,res))
while res[-1] == '0': res.pop()
if sgn:res.append('-')
return ''.join(res[::-1])
改进做法
class Solution:
def multiply(self, num1: str, num2: str) -> str:
if num1 == '0' or num2 == '0':return '0'
sgn = (num1[0] == '-') ^ (num2[0] == '-')
num1 = list(num1[::-1])
num2 = list(num2[::-1])
if num1[-1] == '-':num1.pop()
if num2[-1] == '-':num2.pop()
num1 = list(map(int,num1))
num2 = list(map(int,num2))
res = [0] * 1000
for i in range(len(num1)):
for j in range(len(num2)):
res[i + j] += num1[i] * num2[j]
for i in range(len(num1) + len(num2)):
res[i + 1] += res[i] // 10
res[i] %= 10
res = list(map(str,res))
while res[-1] == '0': res.pop()
if sgn:res.append('-')
return ''.join(res[::-1])
原始做法是对小学整数乘法的简单模拟,而改进版的代码,将逐位相乘的过程和进位的过程进行分开,虽然在代码长度上相差不大,但代码的编写难度略有降低。
如图所示。
题目链接
原创不易,感谢支持!