- 分类:BackTracking/DFS
- 时间复杂度: O(n^2)
39. Combination Sum
Given a set of candidate numbers (candidates
) (without duplicates) and a target number (target
), find all unique combinations in candidates
where the candidate numbers sums to target
.
The same repeated number may be chosen from candidates
unlimited number of times.
Note:
- All numbers (including
target
) will be positive integers. - The solution set must not contain duplicate combinations.
Example 1:
Input: candidates = [2,3,6,7], target = 7,
A solution set is:
[
[7],
[2,2,3]
]
Example 2:
Input: candidates = [2,3,5], target = 8,
A solution set is:
[
[2,2,2,2],
[2,3,3],
[3,5]
]
代码:
方法:
class Solution:
def combinationSum(self, candidates, target):
"""
:type candidates: List[int]
:type target: int
:rtype: List[List[int]]
"""
res=[]
if (candidates==None) or (len(candidates)==0):
return res
my_combination=[]
def helper(res,list_,candidates,target,start):
if target<0:
return
if target==0:
print(list_)
res.append(list_.copy())
return
for i in range(start,len(candidates)):
list_.append(candidates[i])
helper(res,list_,candidates,target-candidates[i],i)
list_.pop()
helper(res,my_combination,candidates,target,0)
return res
讨论:
1.先用的是BackTracking的方法,然后好累不想搞了。。。