LeetCode-python 39.组合总和

题目链接
难度:中等       类型:深度优先搜索


给定一个无重复元素的数组 candidates 和一个目标数 target ,找出 candidates 中所有可以使数字和为 target 的组合。

candidates 中的数字可以无限制重复被选取。

示例1

输入: candidates = [2,3,6,7], target = 7,
所求解集为:
[
[7],
[2,2,3]
]

示例2

输入: candidates = [2,3,5], target = 8,
所求解集为:
[
[2,2,2,2],
[2,3,3],
[3,5]
]

解题思路


典型的深度优先搜索,每次加入一个数nums[i],target就更新为target-nums[i]
搜索结束的条件:

  1. target<0,这条路径的和不为target,放弃
  2. target==0, 这条可以,收入囊中

代码实现

class Solution(object):
    def combinationSum(self, candidates, target):
        """
        :type candidates: List[int]
        :type target: int
        :rtype: List[List[int]]
        """
        length = len(candidates)
         
        res = []
        def dfs( target, index, maybe):
            if target < 0:
                return
            if target == 0:
                res.append(maybe)
                return 
            for i in range(index, length):
                dfs(target-candidates[i], i, maybe+[candidates[i]])
        
        dfs(target, 0, [])
        return res

本文链接:https://www.jianshu.com/p/82e6885f0871

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。