Subsets Problem
Given a set of distinct integers, return all possible subsets.
NoticeElements in a subset must be in non-descending order.
The solution set must not contain duplicate subsets.
If S = [1,2,3], a solution is:
[ [3], [1], [2], [1,2,3], [1,3], [2,3], [1,2], [] ]Challenge
Can you do it in both recursively and iteratively?
Solutionclass Solution { public ArrayListSubsets II Problem> subsets(int[] nums) { ArrayList > res = new ArrayList<>(); if (nums == null || nums.length == 0) return res; ArrayList cur = new ArrayList<>(); Arrays.sort(nums); dfs(nums, cur, res, 0); return res; } public void dfs(int[] nums, ArrayList cur, ArrayList > res, int index) { if (index > nums.length) return; res.add(new ArrayList (cur)); for (int i = index; i < nums.length; i++) { cur.add(nums[i]); dfs(nums, cur, res, i+1); cur.remove(cur.size()-1); } } }
Given a list of numbers that may has duplicate numbers, return all possible subsets
##Notice
Each element in a subset must be in non-descending order.
The ordering between two subsets is free.
The solution set must not contain duplicate subsets.
Have you met this question in a real interview? Yes
If S = [1,2,2], a solution is:
[ [2], [1], [1,2,2], [2,2], [1,2], [] ]Challenge
Can you do it in both recursively and iteratively?
Solutionclass Solution { public ArrayList> subsetsWithDup(ArrayList S) { ArrayList > res = new ArrayList<>(); Collections.sort(S); ArrayList cur = new ArrayList<>(); dfs(S, cur, res, 0); return res; } public void dfs(ArrayList S, ArrayList cur, ArrayList > res, int index) { if (index > S.size()) return; res.add(new ArrayList (cur)); for (int i = index; i < S.size(); i++) { if (i != index && S.get(i) == S.get(i-1)) continue; cur.add(S.get(i)); dfs(S, cur, res, i+1); cur.remove(cur.size()-1); } } }
文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。
转载请注明本文地址:https://www.ucloud.cn/yun/65006.html
摘要:不同数包含重复数为的时候,表示在外层的循环正在被使用,所以当前循环遇到为一定要跳过。对当前循环要添加的数组,在添加当前元素后进行递归,递归之后要将当前元素的使用标记改为,表示已经使用和递归完毕,然后再将这个元素从的末位删除。 Subsets Problem Given a set of distinct integers, nums, return all possible subse...
摘要:题目要求可以先参考关于的这篇博客再看接下来的内容。思路一链表的形式我们可以通过例子,,,来说明。在递归中我们会将起始下标后的值依次加入当前结果集,并将结果集加入结果集数组中。如果遇到重复的数字,则继续遍历下一个数字,直至遍历结束。 题目要求 Given a collection of integers that might contain duplicates, nums, retur...
摘要:题目描述注意题目解读找出所有的子集。思路确定子集的来源,遍历原始列表,每一个元素都往已有的子集列表里边添加,同时添加到已有的子集中去,产生新的子集。类似于动态规划思想,依赖于之前的东西产生现在的东西。 题目描述 Given a collection of integers that might contain duplicates, nums, return all possible ...
摘要:写这个系列是因为纪念一下去年的今天,就是年的月号,刷题第一天,今天是一周年纪念日。排除,就是返回一空的。复杂度分析算法课讲过,这个复杂度是指数次,能实现出来就行了,没法优化。复杂度分析不分析了,反正指数次。 Subsets 写这个系列是因为纪念一下去年的今天,就是2015年的9月14号,刷题第一天,今天是一周年纪念日。当时只敢做easy还得抄答案的我想啥时候能做上medium啊,事到如...
摘要:深度优先搜索复杂度时间空间递归栈空间思路这道题可以转化为一个类似二叉树的深度优先搜索。另外需要先排序以满足题目要求。新的集合要一个新的,防止修改引用。 Subset I Given a set of distinct integers, nums, return all possible subsets. Note: Elements in a subset must be in n...
阅读 1510·2021-11-23 09:51
阅读 1064·2021-10-12 10:12
阅读 2782·2021-09-22 16:06
阅读 3595·2019-08-30 15:56
阅读 3369·2019-08-30 15:53
阅读 3070·2019-08-29 16:29
阅读 2320·2019-08-29 15:27
阅读 1989·2019-08-26 10:49