Given a set of candidate numbers (C) and a target number (T), find all unique combinations in C where
the candidate numbers sums to T.
The same repeated number may be chosen from C unlimited number of times.
Note:
- All numbers (including target) will be positive integers.
- The solution set must not contain duplicate combinations.
For example, given candidate set [2, 3, 6, 7]
and target 7
,
A solution set is:
[ [7], [2, 2, 3] ]
本题考查的是回溯遍历采用递归很容易求解。(注意避免重复)
public class Solution {
private void helper(int[] candidates, int target, List<List<Integer>> list ,int curSum, List<Integer> curList, int s){
if(curSum > target){
return;
}
for(int i=s; i<candidates.length; i++){
curList.add(candidates[i]);
if(curSum+candidates[i] == target){
List subtle = new LinkedList<Integer>(curList);
list.add(subtle);
}else if(curSum+candidates[i] < target){
helper(candidates, target, list, curSum+candidates[i], curList, i);
}else{
}
curList.remove(curList.size()-1);
}
}
public List<List<Integer>> combinationSum(int[] candidates, int target) {
List<List<Integer>> list = new LinkedList<>();
List<Integer> curList = new LinkedList<>();
helper(candidates, target, list, 0, curList, 0);
return list;
}
}