[LeetCode]39. Combination Sum
39. Combination Sum
1. DFS
class Solution(object):
def combinationSum(self, candidates, target):
"""
:type candidates: List[int]
:type target: int
:rtype: List[List[int]]
"""
def recursive(index, cur, path, res):
if cur == 0:
res.append(path)
return
for i in range(index, len(candidates)):
if candidates[i] > cur:
return
recursive(i, cur - candidates[i], path+[candidates[i]], res)
res = []
candidates.sort()
recursive(0, target, [], res)
return res
2. 回溯算法
class Solution(object):
def combinationSum(self, candidates, target):
"""
:type candidates: List[int]
:type target: int
:rtype: List[List[int]]
"""
def backtracking(index, cur, path, res):
if cur == 0:
res.append(list(path)) # 避免保存引用
return
for i in range(index, len(candidates)):
if candidates[i] > cur:
return
path.append(candidates[i])
backtracking(i, cur - candidates[i], path, res)
path.pop()
res = []
candidates.sort()
backtracking(0, target, [], res)
return res
关注公众号:数据结构与算法那些事儿,每天一篇数据结构与算法

浙公网安备 33010602011771号