Share
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]
]
这类题做过几回了,还是用dfs算法,将结果保存在res中。
每次dfs需要提供的参数是index,因为可以重复使用数字,所以for循环都是从index开始。
target记录新的目标数字,path记录用到的数字。
然后注意path+[candidates[i]]这里,外面要有一个括号,否则成了数组加数字了。
如果用append会出现candidates[i]为None的情况。
class Solution:
def combinationSum(self, candidates: List[int], target: int) -> List[List[int]]:
res=[]
l=len(candidates)
def dfs(index,target,path):
if target<0:return
if target==0:
res.append(path)
return
for i in range(index,l):
dfs(i, target-candidates[i], path+[candidates[i]])
dfs(0, target, [])
return res