給定乙個無重複元素的陣列candidates
和乙個目標數target
,找出candidates
中所有可以使數字和為target
的組合。
candidates
中的數字可以無限制重複被選取。
說明:
示例 1:
輸入:candidates =示例 2:[2,3,6,7],
target =7
,所求解集為:[[7],
[2,2,3]
]
輸入: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...