给定两个以字符串形式表示的非负整数 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)或直接将输入转换为整数来处理。
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/multiply-strings
解题思路:模拟两数相乘
主要思路:记得补0
大佬解法
class Solution:
def multiply(self, num1: str, num2: str) -> str:
if num1 == "0" or num2 == "0":
return "0"
ans = "0"
m, n = len(num1), len(num2)
for i in range(n - 1, -1, -1): # 543210 大程序主要是两个循环
add = 0
y = int(num2[i])
curr = ["0"] * (n - 1 - i) # 把0提前加进数组(循环一)
for j in range(m - 1, -1, -1):
product = int(num1[j]) * y + add # 求单个数的两两之积(循环二)
curr.append(str(product % 10)) # 再将两单数之积处理 81 % 10 = 1
add = product // 10 # 再将两单数之积进位处理 81 // 10 = 8
if add > 0:
curr.append(str(add))
curr = "".join(curr[::-1])
ans = self.addStrings(ans, curr) # 再利用字符串求和
return ans
# 415 字符串相加
def addStrings(self, num1: str, num2: str) -> str:
i, j = len(num1) - 1, len(num2) - 1
add = 0
ans = list()
while i >= 0 or j >= 0 or add != 0:
x = int(num1[i]) if i >= 0 else 0
y = int(num2[j]) if j >= 0 else 0
result = x + y + add
ans.append(str(result % 10))
add = result // 10
i -= 1
j -= 1
return "".join(ans[::-1])
我的超时解法
class Solution:
def mul(list1, val): # 多乘一 返回列表
# 初始化
up = 0
sum1 = []
mutl = 0
for i_0 in range(len(list1)):
i = len(list1) - 1 - i_0
mult = int(list1[i]) * val + up
print(mult)
up = mult // 10
if i != 0:
sum1.insert(0, str(int(mult) % 10))
if i == 0:
sum1.insert(0, str(int(mult)))
print(sum1)
return sum1
def plus(a, b):
res = ''
n, m, carry = len(a) - 1, len(b) - 1, 0
while n >= 0 or m >= 0:
n1 = int(a[n]) if n >= 0 else 0
m1 = int(b[m]) if m >= 0 else 0
tem = n1 + m1 + carry
carry = tem // 10
res = str(tem % 10) + res
n, m = n - 1, m - 1
return '1' + res if carry else res
def multiply(self, num1: str, num2: str) -> str:
if num1 == '0' or num2 == '0':
return '0'
sum_str = ''
for i in range(len(num2)):
i_0 = len(num2) - 1 - i
str1 = ''.join(Solution.mul(num1, int(num2[i_0])))
str1 = str1 + i * '0'
sum_str = Solution.plus(sum_str, str1)
return sum_str