题目:字符串相乘
给定两个以字符串形式表示的非负整数 num1
和 num2
,返回 num1
和 num2
的乘积,它们的乘积也表示为字符串形式。
示例 1:
1 | 输入: num1 = "2", num2 = "3" |
示例 2:
1 | 输入: num1 = "123", num2 = "456" |
说明:
num1
和num2
的长度小于110。num1
和num2
只包含数字0-9
。num1
和num2
均不以零开头,除非是数字 0 本身。- 不能使用任何标准库的大数类型(比如 BigInteger)或直接将输入转换为整数来处理。
思路
由于Python
中的int
类型是支持大数的,所以其实没有处理会不会数值过大的必要。
题目中说不允许直接转换成整数处理,其实就是希望我们实现一下乘法的过程,也就是以前学的竖式运算的过程。
1 | 11 |
思路如下:
- 初始化结果res=0
- 进行嵌套循环,从右边依次取
num2
的每个字符串num2[-j]
,转换成int
类型,依次与num1
从右边开始逐个字符串num1[-i]
相乘 - 相乘过程中涉及到进位,可以找到规律是
10 ** (i+j-2)
。
实现如下:
1 | class Solution: |
其他思考
如果不考虑要求,直接使用int()
来转换的话,那么更简单了:
1 | class Solution: |
运行效果与上面相比的话:
1 | import time |
输出如下:
1 | 2469135308642 |
还是差了一个数量级的,再实际使用中,还是用原生的方法比较好。
如果大家有更好的方法,欢迎一起探讨。