LeetCode OJ:Subsets
来源:互联网 发布:淘宝老店新开的利弊 编辑:程序博客网 时间:2024/06/06 04:00
Subsets
Given a set of distinct integers, S, 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 S = [1,2,3]
, a solution is:
[ [3], [1], [2], [1,2,3], [1,3], [2,3], [1,2], []]
递归:
增量构造法:
class Solution {public:void dfs(vector<int> &S,int start,vector<int> &path,vector<vector<int>> &result){ result.push_back(path); for(int i=start;i<S.size();i++){ if(i!=start&&S[i]==S[i-1])continue; path.push_back(S[i]); dfs(S,i+1,path,result); path.pop_back(); } } vector<vector<int> > subsets(vector<int> &S) { vector<vector<int>> result; vector<int> path; sort(S.begin(),S.end()); dfs(S,0,path,result); return result; }};
class Solution {public: vector<vector<int> > subsets(vector<int> &S) { vector<vector<int>> result; vector<int> path; sort(S.begin(),S.end()); subsets(S,path,0,result); return result; }private: static void subsets(vector<int> &S,vector<int> &path,int step,vector<vector<int>> &result){ if(step==S.size()){ result.push_back(path); return; } //不选 subsets(S,path,step+1,result); //选 path.push_back(S[step]); subsets(S,path,step+1,result); path.pop_back(); }};
位向量法:
class Solution {public: vector<vector<int> > subsets(vector<int> &S) { vector<vector<int>> result; vector<bool> selected(S.size(),false); sort(S.begin(),S.end()); subsets(S,selected,0,result); return result; }private: static void subsets(vector<int> &S,vector<bool> &selected,int step,vector<vector<int>> &result){ if(step==S.size()){ vector<int> subset; for(int i=0;i<S.size();i++) if(selected[i])subset.push_back(S[i]); result.push_back(subset); return; } //不选 selected[step]=false; subsets(S,selected,step+1,result); //选 selected[step]=true; subsets(S,selected,step+1,result); }};
迭代
增量构造法
class Solution {public: vector<vector<int> > subsets(vector<int> &S) { vector<vector<int>> result(1); sort(S.begin(),S.end()); for(auto elem : S){ result.reserve(result.size()*2); auto half = result.begin()+result.size(); copy(result.begin(),half,back_inserter(result)); for_each(half,result.end(),[&elem](decltype(result[0]) &e){ e.push_back(elem); }); } return result; }};
二进制法:
此方法最为巧妙
class Solution {public: vector<vector<int> > subsets(vector<int> &S) { vector<vector<int>> result; sort(S.begin(),S.end()); const size_t n=S.size(); vector<int> v; for(size_t i=0;i<1<<n;i++){ for(size_t j=0;j<n;j++){ if(i&1<<j)v.push_back(S[j]); } result.push_back(v); v.clear(); } return result; }};
0 0
- LeetCode OJ:Subsets II
- LeetCode OJ:Subsets
- LeetCode OJ - Subsets
- LeetCode OJ - Subsets II
- LeetCode OJ Subsets
- LeetCode OJ Subsets II
- 【LeetCode OJ 078】Subsets
- LeetCode OJ-78.Subsets
- 【LeetCode OJ 090】Subsets II
- Leetcode OJ 78 Subsets [medium]
- LeetCode OJ算法题(七十八):Subsets
- LeetCode OJ 之 Subsets (子集合)
- LeetCode OJ 系列之78 Subsets --Python
- <LeetCode OJ> 78 / 90 Subsets (I / II)
- LeetCode OJ 之 Subsets II (子集合-二)
- 【LeetCode】 Subsets Subsets II
- 【LeetCode】Subsets & Subsets II
- LeetCode Subsets && Subsets II
- Skyeye 1.3.5安装心得
- c++primer学习笔记1 - 变量和基本类型
- [DP]NOIP2001 数的计数
- Python快速入门(1)简介、函数、字符串
- VS + VAX 快捷键
- LeetCode OJ:Subsets
- error C2146: 语法错误 : 缺少“;”(在标识符“PVOID64”的前面)
- UVa 10870 Recurrences / 矩阵快速幂
- poj 1050 To the Max(最大子矩阵权值)
- 深入浅出基于Java的建造设计模式
- 转 扩大/home目录的空间 扩展linux虚拟系统 的存储空间
- 题目1129:Skew数
- 寒假虚度5天之小思考
- HTML5画布矩形教程