39 组合总和,所给数组不重复且无限次使用
注意先排序剪枝,不需要去重,简单
40 组合总和二,所给数组有重复,且只能使用一次。
注意去重,注意去重的条件判断,>index
同样剪枝排序
下一层是i+1
class Solution {
List<List<Integer>> res = new ArrayList<>();
public List<List<Integer>> combinationSum2(int[] candidates, int target) {
Arrays.sort(candidates);
dfs(0,candidates,target,new ArrayList<>());
return res;
}
public void dfs(int index, int[] candidates, int target, ArrayList<Integer> list){
if(target==0){
res.add(new ArrayList<>(list));
return;
}
if(target<0) return;
for(int i=index;i<candidates.length;i++){
if(target<candidates[i]) break;
if(i>index&& candidates[i]==candidates[i-1]) continue;
list.add(candidates[i]);
dfs(i+1,candidates,target-candidates[i],list);
list.remove(list.size()-1);
}
}
}