Subsets -- LeetCode
2016-01-27 12:48
363 查看
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 =
思路:由于nums中每个数字都没有重复,因此该数字只有出现或不出现两种情况。
这道题有三种方法来做。第一种是用dfs来遍历每一种情况。
第二种方法,用位运算。每一位表示nums数组中的一个数字是否出现。
第三种是迭代。依次枚举每一个位置的数字,将其加到当前已有的所有子集的最后作为新的子集。
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], [] ]
思路:由于nums中每个数字都没有重复,因此该数字只有出现或不出现两种情况。
这道题有三种方法来做。第一种是用dfs来遍历每一种情况。
class Solution { public: void help(vector<vector<int> >& res, vector<int>& nums, vector<int> cand, int cur) { if (cur == nums.size()) { res.push_back(cand); return; } help(res, nums, cand, cur + 1); cand.push_back(nums[cur]); help(res, nums, cand, cur + 1); } vector<vector<int>> subsets(vector<int>& nums) { sort(nums.begin(), nums.end()); vector<vector<int> > res; vector<int> cand; help(res, nums, cand, 0); return res; } };
第二种方法,用位运算。每一位表示nums数组中的一个数字是否出现。
class Solution { public: vector<vector<int>> subsets(vector<int>& nums) { int tot = 1 << nums.size(); vector<vector<int> > res; sort(nums.begin(), nums.end()); for (int i = 0; i < tot; i++) { vector<int> tem; for (int j = 0; (1 << j) <= i; j++) if ((1 << j) & i) tem.push_back(nums[j]); res.push_back(tem); } return res; } };
第三种是迭代。依次枚举每一个位置的数字,将其加到当前已有的所有子集的最后作为新的子集。
class Solution { public: vector<vector<int>> subsets(vector<int>& nums) { sort(nums.begin(), nums.end()); vector<vector<int>> subs(1, vector<int>()); for (int i = 0; i < nums.size(); i++) { int n = subs.size(); for (int j = 0; j < n; j++) { subs.push_back(subs[j]); subs.back().push_back(nums[i]); } } return subs; } };
相关文章推荐
- xampp修改MySQL密码
- 《从零开始学Swift》学习笔记(Day 65)——Cocoa Touch设计模式及应用之选择器
- [读书笔记]互联网+:传统企业的自我颠覆、组织重构、管理进化与互联网转型
- 拨打国际电话
- POJ 3126 Prime Path BFS搜索
- 华为十年:从DBA到副总裁的辛酸与喜悦
- 安卓一键ROOT权限获取软件排行榜
- PCL-1.8 编译指南(WIN8/VS2013/x64)
- iOS 设置文本中指定某段文本的颜色 大小
- GLM in SPM
- Gulp, 比Grunt更好用的前端构建工具
- Windows 远程桌面文件传输的方法
- CentOS/Redhat VNC 服务
- POJ3279 Fliptile 枚举+简单搜索
- go的学习记录(二)--- 数组与数组切片
- Android开源项目第一篇:个性化控件(View)篇
- HDURevenge of Segment Tree(第二长的递增子序列)
- Java compiler level does not match the version of the installed Java project facet.
- Java:十六进制转换成十进制
- 记录一则ORA-12154,ORA-12560解决过程