class Solution {
public List<List<Integer>> combinationSum2(int[] candidates, int target) {
Arrays.sort(candidates);
//准备结果集合
List<List<Integer>> result = new LinkedList<>();
//准备动态数组
LinkedList<Integer> subset = new LinkedList<>();
//开始递归遍历
backCheck(candidates,0,subset,result,target);
//返回结果集合
return result;
}
public void backCheck(int sum[],int index,LinkedList<Integer> subset,List<List<Integer>> result,int target){
//设置递归的条件
if(target == 0){
result.add(new LinkedList<>(subset));
return;
}else if(target > 0 && index < sum.length){
//选择跳过一样的元素,这样可以保证存在多个相同的数字时不重复取元素
backCheck(sum,getNext(sum,index),subset,result,target);
//选择元素的递归,这里需要注意选择完之后需要删除元素使得元素能够接着遍历下一个可能性
subset.addLast(sum[index]);
backCheck(sum,index + 1,subset,result,target - sum[index]);
subset.removeLast();
}
}
public int getNext(int sum[],int index){
int res = index;
//循环跳过所有值等于本值的元素,保证不越界
while(res < sum.length && sum[res] == sum[index]){
res++;
}
//返回当前的下标
return res;
}
}
包含重复元素的集合java实现
最新推荐文章于 2022-06-24 17:07:48 发布