https://leetcode-cn.com/problems/multiply-strings/
# -*- coding:utf-8 -*-
class Solution(object):
def multiply(self, num1, num2):
"""
:type num1: str
:type num2: str
:rtype: str
"""
if num1 == '0' or num2 == '0':
return "0"
m, n = len(num1), len(num2)
res = [0 for _ in range(m + n)]
for i in range(m - 1, -1, -1):
for j in range(n - 1, -1, -1):
x, y = int(num1[i]), int(num2[j])
res[i + j + 1] += x * y % 10
res[i + j] += x * y // 10 # 进位
print(res)
# [8, 17, 26, 19, 10, 1] -> [9, 9, 8, 0, 0, 1]
# 从后往前遍历, 处理进位
for i in range(m + n - 1, 0, -1):
carry = res[i] // 10
# if carry:
res[i] = res[i] % 10
res[i - 1] += carry
ans = ''.join([str(x) for x in res]).lstrip('0')
return ans
if __name__ == '__main__':
num1 = '123'
num2 = '456'
print(Solution().multiply(num1, num2))
思路:类似于小时候学惩罚列的竖式,取一位和另一个的每一位相乘即可。最后处理一下进位。
0 条评论