大丰做网站哪家公司好,frontpage网页制作实例,电工学高等教育出版社久久建筑网,app免费版下载安装文章目录 组合并集问题汇总#xff1a;题目方法一#xff1a;递归加回溯#xff08;去重版#xff09; 组合并集问题汇总#xff1a;
1、子集非去重版本 2、组合非去重版本 3、组合去重版本
题目 本题nums数组存在重复元素#xff0c;所以本题会涉及一个去重操作#… 文章目录 组合并集问题汇总题目方法一递归加回溯去重版 组合并集问题汇总
1、子集非去重版本 2、组合非去重版本 3、组合去重版本
题目 本题nums数组存在重复元素所以本题会涉及一个去重操作 子集无需去重版本【LeetCode-中等题】78. 子集 组合去重版 【LeetCode-中等题】47. 全排列 II
本题最大的不同就在于组合去重版收获结果是在递归结束末尾而本题去重收获结果是在递归开始的时候并且去重操作的条件都是一样的区别就在于for循环 子集是从startIndex开始的而 组合都是从0开始的
两者的代码对比
方法一递归加回溯去重版 class Solution {
// 递归加回溯ListListInteger res new ArrayList();//最终结果集public ListListInteger subsetsWithDup(int[] nums) {Arrays.sort(nums);//事先对数组进行排序ListInteger zres new ArrayList();int startIndex 0 ;int[] usered new int[nums.length];//标记数组 0代表未使用 1 代表使用过了dfsback(nums,zres,startIndex,usered);return res;}public void dfsback(int[] nums, ListInteger zres,int startIndex,int[] usered){res.add(new ArrayList(zres));//收货结果if(startIndex nums.length) return ;for(int i startIndex ; inums.length;i){if(usered[i] 1) continue;if(i 0 nums[i-1] nums[i] usered[i-1] 0) continue;//去重操作else{zres.add(nums[i]);usered[i] 1;dfsback(nums,zres,i1,usered);//下一层递归zres.remove(zres.size()-1);//回溯过程usered[i] 0;}}}
}