LeetCode-Subsets & Subsets II
2017-10-16 19:44
543 查看
1. Subsets(Medium)
Description[/i]
Given a set of distinct integers, nums, return all possible subsets.
Note: The solution set must not contain duplicate subsets.
For example,
If nums =
Analysis[/i]
使用二进制法枚举子集:
n个数有2^n个子集,每个子集对应一个二进数,每位二进制对应一个数。二进制的位权为0表示子集不包含那个数,二进制的位权为1表示子集包含那个数。
代码:
2. Subsets II(Medium)
Description[/i]
Given a collection of integers that might conta
4000
in duplicates, nums, return all possible subsets.
Note: The solution set must not contain duplicate subsets.
For example,
If nums =
Analysis[/i]
这题与上一题相似,给定的nums不再是集合,它可以拥有重复的数字。这样用二进制法枚举出来的
代码:
Description[/i]
Given a set of distinct integers, nums, return all possible subsets.
Note: The solution set must not contain duplicate subsets.
For example,
If nums =
[1,2,3], a solution is:
[ [3], [1], [2], [1,2,3], [1,3], [2,3], [1,2], [] ]
Analysis[/i]
使用二进制法枚举子集:
n个数有2^n个子集,每个子集对应一个二进数,每位二进制对应一个数。二进制的位权为0表示子集不包含那个数,二进制的位权为1表示子集包含那个数。
代码:
class Solution { public: vector<vector<int>> subsets(vector<int> nums) { sort(nums.begin(), nums.end()); vector<vector<int>> result; int size = nums.size(); vector<int> v; for (int i = 0; i < 1 << size; i++) { for (int j = 0; j < size; j++) { if (i & 1 << j) v.push_back(nums[j]); } result.push_back(v); v.clear(); } return result; } };
2. Subsets II(Medium)
Description[/i]
Given a collection of integers that might conta
4000
in duplicates, nums, return all possible subsets.
Note: The solution set must not contain duplicate subsets.
For example,
If nums =
[1,2,2], a solution is:
[ [2], [1], [1,2,2], [2,2], [1,2], [] ]
Analysis[/i]
这题与上一题相似,给定的nums不再是集合,它可以拥有重复的数字。这样用二进制法枚举出来的
subset就会有重复的元素。我们需要消除重复的元素,这里可以使用STL中的set来避免结果中出现重复的
subset。最后将set的内容复制到vector并返回。
代码:
class Solution { public: vector<vector<int>> subsetsWithDup(vector<int>& nums) { sort(nums.begin(), nums.end()); vector<vector<int>> result; set<vector<int>> temp; int size = nums.size(); vector<int> v; for (int i = 0; i < 1 << size; i++) { for (int j = 0; j < size; j++) { if (i & 1 << j) v.push_back(nums[j]); } temp.insert(v); v.clear(); } copy(temp.begin(), temp.end(), back_inserter(result)); return result; } };
相关文章推荐
- LeetCode Subsets && Subsets II
- LeetCode Subsets && Subsets II
- LeetCode - Subsets I && II
- leetcode题解-78. Subsets && 90. Subsets II
- <LeetCode OJ> 78 / 90 Subsets (I / II)
- leetcode解题之 77. Combinations&78. Subsets&90. Subsets II java 版(求所有子集)
- Leetcode: Subsets & SubsetsII
- leetcode 491. Increasing Subsequences & lc 78. Subsets
- [Leetcode]Subsets I&II
- [LeetCode] Subsets(!!!!!回溯&&迭代&&位操作)(to be updated)
- 【leetcode】Subsets I & II
- 【LeetCode】Subsets & Subsets II
- #LeetCode#SubSets & SubSetsII
- [LeetCode] Subsets I (78) & II (90) 解题思路,即全组合算法
- <LeetCode OJ> 78. Subsets
- Leetcode 78&90. Subsets I & II 【排列与组合的生成总结】
- leetcode -- Subsets I &II-- 重点,求0,1序列
- 78. Subsets && 90. Subsets II
- 【leetcode】Subsets 1&2
- LeetCode解题报告—— Word Search & Subsets II & Decode Ways