LeetCode Python 43 字串相乘

2021-09-23 15:29:34 字數 2484 閱讀 5041

給定兩個以字串形式表示的非負整數num1num2,返回num1num2的乘積,它們的乘積也表示為字串形式。

示例 1:

輸入:num1 = "2", num2 = "3"輸出:"6"
示例 2:

輸入:num1 = "123", num2 = "456"輸出:"56088"
說明:

num1num2的長度小於110。

num1num2只包含數字0-9

num1num2均不以零開頭,除非是數字 0 本身。

不能使用任何標準庫的大數型別(比如 biginteger)直接將輸入轉換為整數來處理

第一種思路:

列豎式計算乘法的思路,每一位逐位乘然後加起來。

需要寫兩個輔助函式:

1. 計算乙個用字串表示的數和乙個數字的乘積

2. 計算兩個用字串表示的數的和

class solution(object):

def multiply(self, num1, num2):

""":type num1: str

:type num2: str

:rtype: str

"""if len(num1) < len(num2):

num1, num2 = num2, num1

if num1 == "0" or num2 == "0":

return "0"

num2 = num2[::-1]

tmp, res = ,

for i, char in enumerate(num2):

tmp = self.stringmultidigit(num1, int(char)) + "0" * i #計算當前位乘法的結果,注意末尾添0

res = self.stringplusstring(res, tmp) #加上當前位結果

return "".join(res)

def stringmultidigit(self,s, n): #計算乙個字串和乙個數字的乘積, 返回字串

s = s[::-1]

l =

for char in s:

for i, char in enumerate(l):

l[i] *= n

for i, char in enumerate(l):

while(l[i] > 9):

tmp = l[i] // 10

l[i] -= tmp * 10

if i == len(l) - 1:

l[i + 1] += tmp

return "".join(str(char) for char in l[::-1])

def stringplusstring(self,s1, s2): #字串加法,返回字串

# print s1, s2

s1, s2 = s1[::-1], s2[::-1]

l1, l2 = ,

for char in s1:

for char in s2:

# tmp =

if len(l1) < len(l2):

l1, l2 = l2, l1

i = 0

for i in range(len(l2)):

l1[i] += l2[i]

if l1[i] > 9:

l1[i] -= 10

if i == len(l1) - 1:

l1[i + 1] += 1

i += 1

if i < len(l1) - 1: #處理最後一位可能的進製

if l1[i] > 9:

l1[i] -= 10

if i == len(l1) - 1:

l1[i + 1] += 1

return "".join(str(char) for char in l1[::-1])

第二種思路:

作弊……

class solution(object):

def multiply(self, num1, num2):

""":type num1: str

:type num2: str

:rtype: str

"""return str(int(num1) * int(num2))

LeetCode Python 打家劫舍I

你是乙個專業的小偷,計畫偷竊沿街的房屋。每間房內都藏有一定的現金,影響你偷竊的唯一制約因素就是相鄰的房屋裝有相互連通的防盜系統,如果兩間相鄰的房屋在同一晚上被小偷闖入,系統會自動報警。給定乙個代表每個房屋存放金額的非負整數陣列,計算你在不觸動警報裝置的情況下,能夠偷竊到的最高金額。示例 1 輸入 1...

leetcode Python編碼練習

貪心演算法 1.環形路上有n個加油站,第i個加油站的汽油量是gas i 你有一輛車,車的油箱可以無限裝汽油。從加油站i走到下乙個加油站 i 1 花費的油量是cost i 你從乙個加油站出發,剛開始 的時候油箱裡面沒有汽油。求從哪個加油站出發可以在環形路上走一圈。返回加油站的下標,如果沒有答案的話返回...

leetcode Python實現 70 爬樓梯

描述 假設你正在爬樓梯。需要 n 步你才能到達樓頂。每次你可以爬 1 或 2 個台階。你有多少種不同的方法可以爬到樓頂呢?注意 給定 n 是乙個正整數。示例1 輸入 2 輸出 2 解釋 有兩種方法可以爬到樓頂。1.1 步 1 步 2.2 步 示例2 輸入 3 輸出 3 解釋 有三種方法可以爬到樓頂。...