39. 组合总和
def combinationSum(self, candidates: List[int], target: int) -> List[List[int]]:
#好复杂,元素还可以重复使用
#虽然是回溯,看了题解,也可以用动态规划来做
#DP的话,用完全背包
#回溯
res = []
candidates.sort()
def dfs(target, index, path):
if target < 0:
return # backtracking
if target == 0:
res.append(path)
return
for i in range(index, len(candidates)):
dfs(target-candidates[i], i, path+[candidates[i]])
dfs(target, 0, [])
return res