class Solution {
private List<List<Integer>> rs;
private void dfs(int[] candidates,int target,int cur,List<Integer> curList,int pos){
if(cur==target){
rs.add(new ArrayList<>(curList));
return;
}
for(int i=pos;i<candidates.length;i++){
if(cur+candidates[i]>target){
continue;
}
curList.add(candidates[i]);
dfs(candidates,target,cur+candidates[i],curList,i);
curList.remove(curList.size()-1);
}
}
// 去重的方法:每个只选自己和自己后面的
public List<List<Integer>> combinationSum(int[] candidates, int target) {
rs=new ArrayList<>();
dfs(candidates,target,0,new ArrayList<>(),0);
return rs;
}
}