leetcode43字符串乘法
竖式乘法
就是我们平时计算乘法时采用的方法,多位数×一个数,再将每一次乘得的数按照这个数对应的位次加起来
暴力算法
将每一位×每一位,再根据位次×相应的10^n,最后加起来
注
我刚开始看题目的时候我都没搞懂什么叫做不能将输入直接转换为整数,然后我就直接去看题解,结果更懵了,题解不还是将其转换为整数吗,而且你既然都已经将第一个数转为原先的整数了,为啥不直接将第二个也这样做,然后直接乘起来?我搞不懂为什么要绕一个大圈去做竖式乘法,我不理解,但我还是照着竖式乘法的去做了一遍,感觉题目的限制没有说清楚
- 哦对,注意0*任何数为0
代码
竖式乘法
def multiply(self, num1, num2):
if num1=="0" or num2=="0":
return "0"
m,n=len(num1),len(num2)
p,q,b=0,0,0
for i in range(m-1,-1,-1):
a=int(num1[i])*(10**p)
q=a+q
p+=1
p=0
for j in range(n-1,-1,-1):
a=int(num2[j])*q
b+=a*(10**p)
p+=1
return str(b)
暴力
注意每次循环第二个数的时候要将它的次数清零,否则会算出来一个很大很大的数
def multiply(self, num1, num2):
if num1=="0" or num2=="0":
return "0"
m,n=len(num1),len(num2)
b,p=0,0
for i in range(m-1,-1,-1):
q=0
for j in range(n-1,-1,-1):
a=int(num1[i])*int(num2[j])
b+=a*10**(p+q)
q+=1
p+=1
return str(b)