题目链接
题目描述
给定两个以字符串形式表示的非负整数 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)或直接将输入转换为整数来处理。
解答
方法一
直接转为整数计算,理论上不符合题意,但是目前leetcode无法check。大致有以下2种方式
1 | return str(int(num1) * int(num2)) |
方法二
竖乘法,将手工运算方法转为代码。这种方式需要注意细节。
方法三
这种方法来自:Easiest JAVA Solution with Graph Explanation
a*b=c
,则len(c)<=len(a)+len(b)
,如999*999 < 999*1000
,所以999*999
的值不会超过6位,可以设置长度为len(a)+len(b)
的列表来存最后的结果。
使用竖乘法,num1的第i位和num2的第j位,结果存在i+j
和i+j+1
位
1 | class Solution(object): |