43.字符串相乘
题目描述
给定两个以字符串形式表示的非负整数 num1 和 num2,返回 num1 和 num2 的乘积,它们的乘积也表示为字符串形式。
示例 1:
输入: num1 = “2”, num2 = “3”
输出: “6”
思路
1.将num1、num2两个字符串转为整数相乘,然后将结果转为字符串返回
2.使用python内置函数eval()执行num1 * num2表达式,将eval函数返回结果转为字符串返回
3.做加法(详细思路见leetcode题解)
4.做乘法(详细思路见leetcode题解)
代码
class Solution(object):
def multiply(self, num1, num2):
"""
将num1、num2两个字符串转为整数相乘,然后将结果转为字符串返回
:type num1: str
:type num2: str
:rtype: str
"""
return str(int(num1) * int(num2))
def multiply1(self, num1: str, num2: str) -> str:
"""
将num1、num2两个字符串转为整数相乘,然后将结果转为字符串返回
:param num1:
:param num2:
:return:
"""
if num1 == "0" or num2 == "0":
return "0"
num1_to_int = 0
num2_to_int = 0
t = 1
for i in range(1, len(num1)+1):
num1_to_int += int(num1[-i]) * t
t = t * 10
t = 1
for i in range(1, len(num2)+1):
num2_to_int += int(num2[-i]) * t
t = t * 10
return str(num1_to_int * num2_to_int)
def multiply2(self, num1: str, num2: str) -> str:
"""使用python内置函数eval()执行num1 * num2表达式,将eval函数返回结果转为字符串返回"""
if num1 == "0" or num2 == "0":
return "0"
return str(eval(num1 + '*' + num2)) # eval() 函数用来执行一个字符串表达式,并返回表达式的值。
def multiply3(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):
add = 0
y = int(num2[i])
curr = ["0"] * (n - i - 1) # num2除了最低位以外,其余的每一位的运算结果都需要补0
print("curr:", curr)
for j in range(m - 1, -1, -1):
product = int(num1[j]) * y + add
curr.append(str(product % 10))
add = product // 10
if add > 0:
curr.append(str(add))
curr = "".join(curr[::-1])
ans = self.addStrings(ans, curr)
return ans
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])
def multiply4(self, num1: str, num2: str) -> str:
"""做乘法"""
if num1 == "0" or num2 == "0":
return "0"
m, n = len(num1), len(num2)
ansArr = [0] * (m + n)
for i in range(m - 1, -1, -1):
x = int(num1[i])
for j in range(n - 1, -1, -1):
ansArr[i + j + 1] += x * int(num2[j])
for i in range(m + n - 1, 0, -1):
ansArr[i-1] += ansArr[i] // 10
ansArr[i] %= 10
index = 1 if ansArr[0] == 0 else 0
ans = "".join(str(x) for x in ansArr[index:])
return ans
if __name__ == "__main__":
slt = Solution()
result = slt.multiply4("12", "34")
print(result)
print(type(result))