LeetCode43.字符串相乘【大整数相乘】

在这里插入图片描述

LeetCode刷题记录


📜题目描述

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

注意:不能使用任何内置的 BigInteger 库或直接将输入转换为整数。

示例1

输入: num1 = "2", num2 = "3"
输出: "6"

示例1

输入: num1 = "123", num2 = "456"
输出: "56088"

提示:

  • 1 <= num1.length, num2.length <= 200
  • num1 和 num2 只能由数字组成。
  • num1 和 num2 都不包含任何前导零,除了数字0本身。

💡解题思路

解法1
image-20220917190830777
代码1
在这里插入图片描述
对于解法1来说,时间复杂度:O(MN+N^2)

M为num1的长度,N为num2的长度

外层:N , 内层:遍历num1:M,字符串相加(最大为M+N)

​ 内层整体取M+N

所以整体是M*N+N^2


解法2

该算法是通过两数相乘时,乘数某位与被乘数某位相乘,与产生结果的位置的规律来完成

乘数num1的长度为M,num2的长度为N

那么他们的结果的位数不会超过M+N(一位数*两位数结果最大也就3位数 99*9),假设存放在串mul

对于串num1,和串num2num1[i]*num2[j]的结果一定是两位数并且小于等于81,"xy"形式或者"0y形式",其中第一位位于mul[i+j],第二位位于mul[i+j+1]

如图所示:

image-20220917200525530

所以,思路就是:

  1. 首先new一个M+N大小的int数组mul用于存放最后结果
  2. 然后依次把num1[i]与num2[j]相乘的结果 追加到 mul[i+j+1]位置,然后让mul[i+j]位置 += mul[i+j+1]%10 , mul[i+j+1]位置/=10

最后的整型数组用一个string依次拼接就是目标结果
代码2
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值