LeetCode #39 Combination Sum
题目
解题思路
这是一道典型的排列组合问题,考虑采用递归的方法解决,每次递归计算时需要有一个数据池,用来从中选择数据加到当前已选择数的数组中;一个target,如果当前数candidates[i]大于target了,就可以跳过;还需要一个记录已选择数的数组path,记录此次递归之前经过的路径;另外还要一个返回值数组ret,如果target等于0了,就可以直接把path加到ret中了。
代码
class Solution:
def combinationSum(self, candidates: List[int], target: int) -> List[List[int]]:
ret = []
self.dfs(candidates, target, [], ret)
return ret
def dfs(self, candidates: List[int], target: int, path: List[int], ret: List[List[int]]):
if target < 0:
return
if target == 0:
ret.append(path)
return
for i in range(len(candidates)):
if target < candidates[i]:
continue
self.dfs(candidates[i:], target-candidates[i], path+[candidates[i]], ret)

浙公网安备 33010602011771号