示例1:
輸入: num1 = "2", num2 = "3"
輸出: "6"
示例2:
輸入: num1 = "123", num2 = "456"
輸出: "56088"
num1
和num2
的長度小於110。
num1
和num2
只包含數字0-9
。
num1
和num2
均不以零開頭,除非是數字 0 本身。
不能使用任何標準庫的大數型別(比如 biginteger)或直接將輸入轉換為整數來處理。
二、思路
看到這題的時候就想著直接轉換成整數就可以計算了呀,但是題目要求不能這樣。那好吧,那我自己制定轉換方式不過這樣不太好。還是用蠢辦法來寫吧,直接模仿人類的計算方式來寫:
按照習慣先計算低位,所以講兩個陣列倒過來
判斷實現是否有進製的情況,如果沒有則進行按位相乘,如果有進製則進製數+乘積
判斷乘積是否大於9,是則進製。
將之前計算出來的結果與乘積相加。依舊要判斷是否需要進製
注意:需要判斷最高位是否還有進製的情況。
# _*_ coding:utf-8 _*_
''' @author:xianyt
@date:2018/
@func:
給定兩個以字串形式表示的非負整數 num1 和 num2,返回 num1 和 num2 的乘積,它們的乘積也表示為字串形式。
'''class solution(object):
def multiply(self, num1, num2):
""":type num1: str
:type num2: str
:rtype: str
"""if num1=="0" or num2=="0":
return "0"
result = [0 for i in range(len(num1)-1)]
len_num2 = len(num2)
num1 = num1[::-1]
num2 = num2[::-1]
#處理進製
carry = [0 for i in range(len(num1)+len(num2))]
for l2 in range(len_num2):
i = l2
for n1 in num1:
if carry[i] != 0:
# 判斷之前是否有進製的情況,清空已經處理的進製
result[i] += carry[i]
carry[i] = 0
mul = int(num2[l2])*int(n1)
#判斷按位相乘的積是否是個位數
if mul>9:
carry[i+1] += mul//10
result[i] += (mul%10)
# 判斷結果是否是個位數
if result[i] > 9:
carry[i+1] += result[i]//10
result[i] = result[i] % 10
i += 1
if carry[len(result)] != 0: #判斷最高位是否還有進製
p = ''.join(str(i) for i in result)
p = p[::-1]
return p
if __name__ == "__main__":
solu = solution()
print(solu.multiply("2", "3")) #6
print(solu.multiply("723", "10")) #7230
print(solu.multiply("111", "94")) #10434
print(solu.multiply("234", "673")) #157482
print(solu.multiply("234", "73")) #17082
print(solu.multiply("111", "43")) #4773
print(solu.multiply("243", "4")) #97
print(solu.multiply("97", "4773")) #462981
leetcode 字母異位詞分組(python)
題目 給定乙個字串陣列,將字母異位片語合在一起。字母異位詞指字母相同,但排列不同的字串。示例 輸入 eat tea tan ate nat bat 輸出 ate eat tea nat tan bat 說明 所有輸入均為小寫字母。不考慮答案輸出的順序。注意 需熟悉字典的相關使用方法 class so...
leetcode 200 島嶼數量 python
給你乙個由 1 陸地 和 0 水 組成的的二維網格,請你計算網格中島嶼的數量。島嶼總是被水包圍,並且每座島嶼只能由水平方向或豎直方向上相鄰的陸地連線形成。此外,你可以假設該網格的四條邊均被水包圍。示例 1 輸入 11110 11010 11000 00000 輸出 1示例 2 輸入 11000 11...
leetcode 字母異位詞分組 python3
給定乙個字串陣列,將字母異位片語合在一起。字母異位詞指字母相同,但排列不同的字串。示例 輸入 eat tea tan ate nat bat 輸出 ate eat tea nat tan bat 說明 所有輸入均為小寫字母。不考慮答案輸出的順序。python中使用 字典 維護乙個分組表,鍵值 key...