LeetCode使用python實現字串相乘

2021-09-05 12:50:47 字數 2273 閱讀 2449

示例1:

輸入: num1 = "2", num2 = "3"

輸出: "6"

示例2:

輸入: num1 = "123", num2 = "456"

輸出: "56088"

num1num2的長度小於110。

num1num2只包含數字0-9

num1num2均不以零開頭,除非是數字 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...