40-Combination-Sum-II
0x1 题目详情
0x2 解题思路
0x3 实现代码
class Solution {
public List<List<Integer>> combinationSum2(int[] candidates, int target) {
List<List<Integer>> result=new ArrayList<>();
if(candidates== null || candidates.length==0){
return result;
}
Arrays.sort(candidates);
recur(candidates,0,target,new ArrayList<Integer>(),result);
return result;
}
private void recur(int[] candidates,int index,int target,List<Integer> curResult,List<List<Integer>> result){
if(target==0){
result.add(new ArrayList<Integer>(curResult));
return;
}
for(int i=index;i<candidates.length;i++){
if(target<candidates[i]){
return;
}
//在同一递归函数内完成循环才算是同一级
//注意这里的i>index,而不是i>0,因为递归函数有多个递归子过程,在子过程中开始的循环起点就不是0了啊
//在这里也搞了半天
if(i>index && candidates[i]==candidates[i-1]){
continue;
}
curResult.add(candidates[i]);
recur(candidates,i+1,target-candidates[i],curResult,result);
curResult.remove(curResult.size()-1);
}
}
}0x4 课后总结
Last updated