LeetCode #39 Combination Sum

题目

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)
posted @ 2020-10-12 10:37  老鼠司令  阅读(51)  评论(0)    收藏  举报