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]
]
注:
candidate [ˈkændɪdət]:候选人,申请人,投考者,应视者
unlimited [ʌnˈlɪmɪtɪd]:尽量多的,任意多的,无限制的
class Solution {
List<List<Integer>> res=new ArrayList();
public List<List<Integer>> combinationSum(int[] candidates, int target) {
if(candidates.length==0) return res;
findCombination(candidates,target,0,new ArrayList<Integer>());
return res;
}
//c中保存了start个和为target的元素
private void findCombination(int[]candidates,int target,int start,ArrayList<Integer> c){
if(target==0){
res.add(new ArrayList(c));
return;
}
if(target<0)
return;
for(int i=start;i<candidates.length;i++){
c.add(candidates[i]);
findCombination(candidates,target-candidates[i],i,c);
c.remove(c.size()-1);
}
}
}