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]
]
经典的动态规划题,一般这种题都需要额外一个递归函数,并且有一个临时存储tmp,一个数组索引start。
class Solution:
def combinationSum(self, candidates: List[int], target: int) -> List[List[int]]:
def find(start,tmp,target,res):
if target<0:
return
if target==0:
res.append(tmp.copy())
return
for i in range(start,len(candidates)):
tmp.append(candidates[i])
find(i,tmp,target-candidates[i],res)
tmp.pop()
tmp=[]
res=[]
find(0,tmp,target,res)
return res