LeetCode43字串相乘
阿新 • • 發佈:2018-12-02
給定兩個以字串形式表示的非負整數 num1
和 num2
,返回 num1
和 num2
的乘積,它們的乘積也表示為字串形式。
示例 1:
輸入: num1 = "2", num2 = "3" 輸出: "6"
示例 2:
輸入: num1 = "123", num2 = "456" 輸出: "56088"
說明:
num1
和num2
的長度小於110。num1
和num2
只包含數字0-9
。num1
和num2
- 不能使用任何標準庫的大數型別(比如 BigInteger)或直接將輸入轉換為整數來處理
思路
通過字典將字串轉換成整數,然後再相乘,最後通過str()將整數再次轉換成字串。
class Solution(): def multiply(self,num1,num2): dict={'0':0,'1':1,'2':2,'3':3,'4':4,'5':5,'6':6,'7':7,'8':8,'9':9} if(num1=='0' or num2=='0'): return '0' n1=0 n2=0 for i in num1: tmp=dict[i] n1=n1*10+tmp for j in num2: tmp=dict[j] n2=n2*10+tmp res=n1*n2 return str(res) num1='234' num2='123' try1=Solution() print(try1.multiply(num2,num1))
方法二:
解題思路:兩個非負數字字串的相乘。其實就是大數乘法。演算法的關鍵是要先將兩個字串翻轉過來,然後按位進行相乘,相乘後的數不要著急進位,而是儲存在一個數組裡面,然後將陣列中的數對10進行求餘(%),就是這一位的數,然後除以10,即/10,就是進位的數。注意最後要將相乘後的字串前面的0去掉。
按照上面的例子,最後結果也可能是3位,1乘以100,如果用array[4]來儲存的話,arr = [0,0,1,0]. ans最後會是0100,所以要把開頭的0去掉
class Solution(): def multiply(self,num1,num2): num1=num1[::-1] num2=num2[::-1] array=[0 for i in range(len(num1)+len(num2))] for i in range(len(num1)): for j in range(len(num2)): array[i+j]+=int(num1(i))*int(num2(j)) ans=[] for i in range(len(array)): d=array[i]%10 c=array[i]//10 if i <len(array)-1: array[i+1]+=c #進位 ans.insert(0,str(d)) #反向插入 while ans[0]=='0' and len(ans)>1: del ans[0] return ''.join(ans)