LeetCode题解(python)
43. 字符串相乘
题目描述
给定两个以字符串形式表示的非负整数 num1
和 num2
,返回 num1
和 num2
的乘积,它们的乘积也表示为字符串形式。
示例 1:
输入: num1 = "2", num2 = "3"
输出: "6"
示例 2:
输入: num1 = "123", num2 = "456"
输出: "56088"
说明:
num1
和num2
的长度小于110。num1
和num2
只包含数字0-9
。num1
和num2
均不以零开头,除非是数字 0 本身。- 不能使用任何标准库的大数类型(比如 BigInteger)或直接将输入转换为整数来处理。
解题心得
本题的难点在于实现乘法,其实也是按照步骤一个一个来,对应位相乘,留余数,看进位。关键是实现过程中乘法的运算是不是搞懂了。
最近太累了,参考的评论区的代码,其他的就不多写了。
解题代码
class Solution:
def multiply(self, num1: str, num2: str) -> str:
if num1 == "0" or num2 == "0":
return "0"
n1 = len(num1)
n2 = len(num2)
result = [0 for i in range(n1 + n2)]
def _sum(value, index):
tmpIndex = n1 + n2 - 1 - index
tmp = result[tmpIndex] + value
if tmp > 9:
result[tmpIndex] = tmp % 10
_sum(tmp // 10, index + 1)
else:
result[tmpIndex] = tmp
for i in range(n1):
a = int(num1[n1 - 1 - i])
for j in range(n2):
b = int(num2[n2 - 1 - j])
c = a * b
_sum(c, i + j) # 从0开始
if result[0] == 0:
return "".join([str(k) for k in result[1:]])
else:
return "".join([str(k) for k in result])
来源:CSDN
作者:Marshal Zheng
链接:https://blog.csdn.net/zysps1/article/details/89085903