415 字符串相加
给定两个以字符串形式表示的非负整数 num1 和 num2,返回 num1 和 num2 的乘积,它们的乘积也表示为字符串形式。
示例 1:
给定两个字符串形式的非负整数 num1 和num2 ,计算它们的和。
注意:
num1 和num2 的长度都小于 5100.
num1 和num2 都只包含数字 0-9.
num1 和num2 都不包含任何前导零。
你不能使用任何內建 BigInteger 库, 也不能直接将输入的字符串转换为整数形式。
解题思路(来自leetcode):
代码:
class Solution:
def addStrings(self, num1: str, num2: str) -> str:
i, j, carry = len(num1) - 1, len(num2) - 1, 0
res = ""
while i >= 0 or j >= 0:
n1 = int(num1[i]) if i >= 0 else 0
n2 = int(num2[j]) if j >= 0 else 0
tmp = n1 + n2 + carry
carry = tmp //10
res = str(tmp % 10) + res
i, j = i-1, j-1
return "1" + res if carry else res
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)或直接将输入转换为整数来处理。
python代码:
来自https://leetcode-cn.com/problems/multiply-strings/solution/python-zi-fu-chuan-bao-li-mo-ni-shu-shi-cheng-fa-j/
class Solution:
def multiply(self, num1: str, num2: str) -> str:
if num1 == "0" or num2 == "0":
return "0"
l1, l2 = len(num1), len(num2)
if l1 < l2:
num1, num2 = num2, num1
l1, l2 = l2, l1
num2 = num2[::-1]
res = "0"
for i, digit in enumerate(num2):
tmp = self.stringMultiplyDigit(num1, int(digit)) + "0" * i
res = self.stringPlusstring(res, tmp)
return res
def stringMultiplyDigit(self, string, n):
s = string[::-1]
res = []
for i,char in enumerate(s):
num = int(char)
res.append(n*num)
res = self.carrySolver(res)
res = res[::-1]
return "".join(str(x) for x in res)
def carrySolver(self, nums):
i = 0
while i < len(nums):
if nums[i] >= 10:
carry = nums[i] // 10
if i == len(nums) - 1:
nums.append(carry)
else:
nums[i+1] += carry
nums[i] %= 10
i += 1
return nums
def stringPlusstring(self, string1, string2):
s1 , s2 = string1, string2
if len(s1) < len(s2):
s1, s2 = s2, s1
s1 = [int(x) for x in s1]
s2 = [int(x) for x in s2]
s1 = s1[::-1]
s2 = s2[::-1]
for i, digit in enumerate(s2):
s1[i] += s2[i]
s1 = self.carrySolver(s1)
s1 = s1[::-1]
return "".join(str(x) for x in s1)