LeetCode Python 39 組合總和

2021-09-12 23:40:38 字數 1845 閱讀 5341

給定乙個無重複元素的陣列candidates和乙個目標數target,找出candidates中所有可以使數字和為target的組合。

candidates中的數字可以無限制重複被選取。

說明:

示例 1:

輸入:candidates =[2,3,6,7],target =7,所求解集為:[

[7],

[2,2,3]

]

示例 2:

輸入:candidates = [2,3,5],target = 8,所求解集為:[

[2,2,2,2],

[2,3,3],

[3,5]

]

思路:

回溯法。

#自己寫的醜陋版本,很慢……

class solution(object):

def combinationsum(self, candidates, target):

""":type candidates: list[int]

:type target: int

:rtype: list[list[int]]

"""res = list()

def generate(c, t, tmp, s):

# print s

if s == target:

# print tmp

return

if s > t:

return

for digit in c:

s = sum(tmp) + digit

generate(c, t, tmp, s)

tmp.pop()

generate(candidates, target, , 0)

#----以下為去重

for i in range(0, len(res)):

res[i].sort()

ress = list()

for i in range(0, len(res)):

flag = 0 # 1 重複 0 單獨

for j in range(i + 1, len(res)):

if res[i] == res[j]:

flag = 1

break

if not flag:

return ress

#大神寫的

class solution(object):

def combinationsum(self, candidates, target):

res =

candidates.sort()

def backtrack(remain, temp, start):

if not remain: #remain為0

else:

for i, n in enumerate(candidates[start:]):

if n > remain:

break

backtrack(remain-n, temp+[n], start+i)

backtrack(target, , 0)

return res

leetcode python3 整數轉羅馬數字

1.思路 將數字分解成千位數 百位數 個位數,對不同的位數中分3個階段進行討論 9的 5 8之間的 4的 1 3之間的。對於不同的分位數和階段加上不同的符號處理 2.class solution def inttoroman self,num str if int num 1000 0 for i ...

leetcode python3演算法 島嶼個數

1.題目描述 給定乙個由 1 陸地 和 0 水 組成的的二維網格,計算島嶼的數量。乙個島被水包圍,並且它是通過水平方向或垂直方向上相鄰的陸地連線而成的。你可以假設網格的四個邊均被水包圍。示例 1 輸入 11110 11010 11000 00000 輸出 1 示例 2 輸入 11000 11000 ...

單排leetcode python3 兩數相加

給定兩個非空鍊錶來代表兩個非負數,位數按照逆序方式儲存,它們的每個節點只儲存單個數字。將這兩數相加會返回乙個新的鍊錶。你可以假設除了數字 0 之外,這兩個數字都不會以零開頭。示例 輸入 2 4 3 5 6 4 輸出 7 0 8原因 342 465 807class listnode def init...