[LeetCode]Subsets
来源:互联网 发布:addictive drums2 mac 编辑:程序博客网 时间:2024/06/07 14:53
题目
Number: 78
Difficulty: Medium
Tags: Array, Backtracking, Bit Manipulation
Given a set of distinct integers, nums, return all possible subsets.
Note:
Elements in a subset must be in non-descending order.
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], []]
题解
给出一个数组,求解数组的所有组合。
可以用三种方法求解,回溯,递归,和位操作。
详细说一下位操作:
比如数组大小为3,[1,2,3]
,那么所有的组合数为2^3
共8种。
如果考虑3位二进制,000,001,010,011,100,101,110,111
,每一位为1就代表相应的一种组合。因此:
000 -> []001 -> [1]010 -> [2]011 -> [1, 2]100 -> [3]101 -> [1, 3]110 -> [2, 3]111 -> [1, 2, 3]
代码
Backtracking
vector<vector<int>> subsets(vector<int>& nums) { sort(nums.begin(), nums.end()); vector<vector<int>> res; vector<int> sub; getsub(res, sub, nums, 0); return res;}void getsub(vector<vector<int>> &res, vector<int> &sub, vector<int> &nums, int start){ res.push_back(sub); for(int i = start; i < nums.size(); i++){ sub.push_back(nums[i]); getsub(res, sub, nums, i + 1); sub.pop_back(); }}
Iterative
vector<vector<int>> subsets(vector<int>& nums) { sort(nums.begin(), nums.end()); vector<vector<int>> res(1, vector<int>()); for(int i = 0; i < nums.size(); i++){ int n = res.size(); for(int j = 0; j < n; j++){ res.push_back(res[j]); res.back().push_back(nums[i]); } } return res;}
Bit Manipulation
vector<vector<int>> subsets(vector<int>& nums) { sort(nums.begin(), nums.end()); int num_sub = pow(2, nums.size()); vector<vector<int>> res(num_sub, vector<int>()); for(int i = 0; i < nums.size(); i++){ for(int j = 0; j < num_sub; j ++){ if((j >> i) & 1) res[j].push_back(nums[i]); } } return res;}
0 0
- 【LeetCode】 Subsets Subsets II
- 【LeetCode】Subsets & Subsets II
- LeetCode Subsets && Subsets II
- LeetCode Subsets && Subsets II
- LeetCode-Subsets & Subsets II
- LeetCode: Subsets
- LeetCode Subsets
- [Leetcode] Subsets
- LeetCode : Subsets
- [LeetCode] Subsets
- Leetcode: Subsets
- Leetcode: Subsets ||
- [leetcode] subsets
- Leetcode - Subsets
- [LeetCode]Subsets
- LeetCode-Subsets
- LeetCode - Subsets
- LeetCode | Subsets
- 抓住移动竞价蓝海,分享移动互联网SEM竞价干货
- [LeetCode]Combinations
- xcode7发送session请求的时候报错解决
- 算法初探——分治法
- HDOJ 1953 Bridging signals (STL,lower_bound)
- [LeetCode]Subsets
- hdu1599 find the mincost route
- 树莓派无线网卡配置
- Binary Tree Paths
- [LeetCode]Word Search
- CodeVS第二次月赛
- ubuntu 非长期支持版升级系统版本(ssh登录情况适用)
- hdu2064汉诺塔III
- 字符串排序(2015华为校招)