返回

leetcode(力扣) 43. 字符串相乘 (模拟乘法)

发布时间:2022-11-01 06:48:04 370
# python

文章目录

  • ​​题目描述​​
  • ​​思路分析:​​
  • ​​完整代码​​

题目描述

给定两个以字符串形式表示的非负整数 num1 和 num2,返回 num1 和 num2 的乘积,它们的乘积也表示为字符串形式。

示例 1:

输入: num1 = “2”, num2 = “3”
输出: “6”
示例 2:

输入: num1 = “123”, num2 = “456”
输出: “56088”

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/multiply-strings
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

思路分析:

下面有要求,不能直接变成整数做,毕竟是个中等题。。

模拟乘法。
比如 123456
1236 + 123* 50 + 123400
再分解 1236 分解成 63 + 620 + 6*100

按照这个思路,注意细节和进位就行了~~~
代码写的比较乱,做个参考。。。

完整代码

class Solution:
def multiply(self, num1: str, num2: str) -> str:
res = []
if num1 == '0' or num2 == '0':
return '0'
num1 = num1[::-1]
num2 = num2[::-1]
temp = 1
carry = 0
for i in range(len(num1)):
ans = []
in_carry = 1
for j in range(len(num2)):
summ = int(num1[i]) * int(num2[j])
summ += carry
if summ >= 10:
if j == len(num2) - 1:
ans.append(summ * in_carry)
carry = 0
else:
quo, rem = divmod(summ, 10)
carry = quo
ans.append(rem * in_carry)
else:
ans.append(summ * in_carry)
carry = 0
in_carry *= 10
res.append(sum(ans) * temp)
temp *= 10

return str(sum(res))

 

特别声明:以上内容(图片及文字)均为互联网收集或者用户上传发布,本站仅提供信息存储服务!如有侵权或有涉及法律问题请联系我们。
举报
评论区(0)
按点赞数排序
用户头像
精选文章
thumb 中国研究员首次曝光美国国安局顶级后门—“方程式组织”
thumb 俄乌线上战争,网络攻击弥漫着数字硝烟
thumb 从网络安全角度了解俄罗斯入侵乌克兰的相关事件时间线