给定一个无重复元素的数组 candidates 和一个目标数 target ,找出 candidates 中所有可以使数字和为 target 的组合。
candidates 中的数字可以无限制重复被选取。
说明:
所有数字(包括 target)都是正整数。
解集不能包含重复的组合。
DFS
先对数组进行排序 然后DFS遍历即可
class Solution {
public List<List<Integer>> combinationSum(int[] candidates, int target) {
Arrays.sort(candidates);
List<Integer> combination = new ArrayList<>();
List<List<Integer>> results = new ArrayList<>();
recursion(candidates, target, 0, combination, results);
return results;
}
public void recursion(int[] candidates, int remainTarget, int startIndex, List<Integer> combination, List<List<Integer>> results){
if(remainTarget < 0)
return;
if(remainTarget == 0){
results.add(new ArrayList<Integer>(combination);
return;
}
for(int i = startIndex; i < candidates.length; i++){
combination.add(candidates[i]);
recursion(candidates, remainTarget - candidates[i], i, combination, results);
combination.remove(combination.size() - 1);
}
}
}