题目
这道题的实质是找出满足条件的所有的组合。
dfs+回溯
class Solution {
public List<List<Integer>> combinationSum(int[] candidates, int target) {
List<List<Integer>> res = new ArrayList<>();
Arrays.sort(candidates);
if(candidates.length==0) return res;
dfs(candidates,res,new ArrayList<Integer>(),target,0);
return res;
}
public void dfs(int[] can,List<List<Integer>> res,List<Integer> list,int target,int pos){
if(target<0) return;
if(target==0){
res.add(new ArrayList<>(list));
return;
}
for(int i=pos;i<can.length;i++){
if(can[i]>target) break;
//if(i>pos && can[i]==can[i-1]) continue;
list.add(can[i]);
dfs(can,res,list,target-can[i],i);
list.remove(list.size()-1);
}
}
}
因为list是动态的,不能直接添加,要开辟出一个新的。
还有其他解法,后续学习~