leetcode 43. Multiply Strings
程序员文章站
2022-03-23 13:14:04
...
对于python3来说,有两种解法。第一种因为有长整型,不用考虑整型的溢出,所以可以直接这么写:
# solution1 python有长整型,所以不用担心溢出
def char_to_int(self, char):
integers = {'0':0,'1':1,'2':2,'3':3,'4':4,'5':5,'6':6,'7':7,'8':8,'9':9}
return integers[char]
def int_to_char(self, integer):
chars = {0:'0',1:'1',2:'2',3:'3',4:'4',5:'5',6:'6',7:'7',8:'8',9:'9'}
return chars[integer]
def multiply(self, num1: str, num2: str) -> str:
# string 转 int
level = 10**(len(num1)-1)
num1_int = 0
for num in num1:
num1_int += self.char_to_int(num) * level
level //= 10
level = 10**(len(num2)-1)
num2_int = 0
for num in num2:
num2_int += self.char_to_int(num) * level
level //= 10
num_ans_int = num1_int * num2_int
# int 转 string
num_ans = ""
while num_ans_int/10 !=0:
num_ans = self.int_to_char(num_ans_int%10) + num_ans
num_ans_int = num_ans_int // 10
if num_ans == "":
num_ans = "0"
return num_ans
第二种解法,假设python 没有长整型:
按照两数相乘的过程,来计算。计算可以分成两部分,用 123456*7654321 来举例:
分为计算红线左边和红线右边
def multiply(self, num1:str, num2:str) ->str:
# 计算红线右边
num_ans = ""
last = 0
for i1 in range(1,len(num1)+1):
m1 = len(num1) - i1
temp = last
for i2 in range(min(i1,len(num2))):
m2 = len(num2) - i2 -1
temp += self.char_to_int(num1[m1+i2]) * self.char_to_int(num2[m2])
last = temp // 10
num_ans = self.int_to_char(temp%10) + num_ans
#计算红线左边
for i2 in range(1,len(num2)):
m2 = len(num2) - i2 -1
temp = last
for m1 in range(min(m2+1,len(num1))):
temp+= self.char_to_int(num1[m1]) * self.char_to_int(num2[m2-m1])
last = temp // 10
num_ans = self.int_to_char(temp%10) + num_ans
while last/10 !=0:
num_ans = self.int_to_char(last%10) + num_ans
last = last // 10
# 一些边缘情况
if num_ans =="":
return "0"
change = True
for num in num_ans:
if num == "0":
pass
else:
change = False
break
if change:
num_ans = "0"
return num_ans
推荐阅读
-
leetcode[43] Multiply Strings
-
[3]43. Multiply Strings(Java)
-
[Leetcode]271. Encode and Decode Strings
-
LeetCode 205. Isomorphic Strings
-
leetcode 43.字符串相乘
-
【LeetCode】面试题43. 1~n整数中1出现的次数(JAVA)
-
leetcode面试题43. 1~n整数中1出现的次数
-
43. Leetcode 94. 二叉树的中序遍历 (二叉树-二叉树遍历)
-
leetcode 43 字符串相乘 / MULTIPLY STRINGS
-
LeetCode 205. Isomorphic Strings