给一组候选数字(C)(没有重复)并给一个目标数字(T),找出 C 中所有唯一的组合使得它们的和为 T。
可以从 C 无限次数中选择相同的数字。
说明:
- 所有数字(包括目标)都是正整数。
- 解集合中没有相同组合。
例如,给一个候选集合 [2, 3, 6, 7]
并且目标为 7
,
一个解的集合为:
[ [7], [2, 2, 3] ]
class Solution:
def combinationSum(self, candidates, target):
"""
:type candidates: List[int]
:type target: int
:rtype: List[List[int]]
"""
def dfs(nums,target,index,path,res):
if target==0:
res.append(path)
elif target>0:
for i in range(index,len(nums)):
t=target-nums[i]
if t>=0:
dfs(nums,t,i,path+[nums[i]],res)
else:
break
candidates.sort()
res=[]
dfs(candidates,target,0,[],res)
return res