分类:Math
考察知识点:Math
最优解时间复杂度:O(n*m)(大佬的) O(n)(我的)
43. Multiply Strings
Given two non-negative integers num1
and num2
represented as strings, return the product of num1
and num2
, also represented as a string.
Example 1:
Input: num1 = "2", num2 = "3"
Output: "6"
Example 2:
Input: num1 = "123", num2 = "456"
Output: "56088"
Note:
- The length of both
num1
andnum2
is < 110. - Both
num1
andnum2
contain only digits0-9
. - Both
num1
andnum2
do not contain any leading zero, except the number 0 itself. - You must not use any built-in BigInteger library or convert the inputs to integer directly.
代码:
大佬高票方法:
class Solution:
def multiply(self, num1, num2):
"""
:type num1: str
:type num2: str
:rtype: str
"""
if num1=="" or num2=="":
return "0"
res=[0]*(len(num1)+len(num2))
for i in range(len(num1)-1,-1,-1):
for j in range(len(num2)-1,-1,-1):
prod=int(num1[i])*int(num2[j])
prod+=res[i+j+1]
res[i+j+1]=prod%10
res[i+j]+=prod//10
start=False
str_num=""
for r in res:
if r:
start=True
if start:
str_num+=str(r)
if str_num=="":
return "0"
return str_num
我的方法:
class Solution:
def multiply(self, num1, num2):
"""
:type num1: str
:type num2: str
:rtype: str
"""
if num1=="" or num2=="":
return "0"
num_1,num_2=0,0
for i in range(len(num1)):
num_1=num_1*10+int(num1[i])
for i in range(len(num2)):
num_2=num_2*10+int(num2[i])
res=num_1*num_2
res_str=""
while res:
res_str=str(res%10)+res_str
res=res//10
if res_str=="":
return "0"
return res_str
讨论:
1.大佬用的Java,然后思想是用数组,然后还原
2.我自己是先转成int,然后相乘,最后转换回来,结果发现还是我的快!So 相信自己┗|`O′|┛ 嗷~~
我的快!相信自己┗|`O′|┛ 嗷~~