[leetcode]39. Combination Sum

Given a set of candidate numbers (C) (without duplicates) and a target number (T), find all unique combinations in C where the candidate numbers sums to T.

The same repeated number may be chosen from C unlimited number of times.

Note:

  • All numbers (including target) will be positive integers.
  • The solution set must not contain duplicate combinations.

 

For example, given candidate set [2, 3, 6, 7] and target 7
A solution set is: 

[
  [7],
  [2, 2, 3]
]

 

求所有和为target的可能组合,每个数可以出现多次

思路:DFS,每加入一个值,继续向下遍历别的值,符合条件,加入结果

 1 class Solution(object):
 2     def combinationSum(self, candidates, target):
 3         if not candidates or not target:
 4             return []
 5         res,ress = [],[]
 6         self.dfs(sorted(candidates),target,res,ress)
 7         return ress
 8     
 9     def dfs(self,nums,target,res,ress):
10         if target < 0: return
11         if target==0:
12             ress.append(res)
13         else:
14             for i,v in enumerate(nums):
15                 if v <= target:
16                     self.dfs(nums[i:],target-v,res+[v],ress)
17         return 

 

posted @ 2017-03-14 23:44  wilderness  阅读(176)  评论(0编辑  收藏  举报