Leetcode: Subsets
来源:互联网 发布:云智能网络 编辑:程序博客网 时间:2024/06/01 10:37
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: vector<vector<int> > subsets(vector<int> &S) { vector<vector<int> > result; if (S.empty()) return result; sort(S.begin(), S.end(), greater<int>()); int size = S.size(); int max_sets = pow(2, size); for (int i = 0; i < max_sets; ++i) { result.push_back(getElement(S, size, i)); } } vector<int> getElement(vector<int> &S, int size, int index) { vector<int> elem; for (int i = 1; index > 0; ++i) { if (index & 1) { elem.push_back(S[size-i]); } index >>= 1; } return elem; }};
===================第二次======================
DFS标准解法,简单,不容易出错, 面试必备。
class Solution {public: vector<vector<int> > subsets(vector<int> &S) { vector<vector<int>> result; vector<int> subset; sort(S.begin(), S.end()); subsets_util(result, subset, S, 0); return result; } void subsets_util(vector<vector<int>> &result, vector<int> &subset, const vector<int> &S, int step) { if (step == S.size()) { result.push_back(subset); return; } subsets_util(result, subset, S, step+1); subset.push_back(S[step]); subsets_util(result, subset, S, step+1); subset.pop_back(); }};
简单优化一下最开始的解法:
class Solution {public: vector<vector<int> > subsets(vector<int> &S) { vector<vector<int> > result; sort(S.begin(), S.end()); int size = S.size(); int max_sets = 1 << size; for (int i = 0; i < max_sets; ++i) { result.push_back(getElement(S, size, i)); } return result; } vector<int> getElement(vector<int> &S, int size, int index) { vector<int> elem; for (int i = 0; index > 0; ++i) { if (index & 1) { elem.push_back(S[i]); } index >>= 1; } return elem; }};
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
- 开源MSP430F147单片机软核添加自定义外设
- 10785 - The Mad Numerologist
- libxml2对XML文件的创建、解析、查找、修改
- Linux设备模型(三)platform
- [性能调整] ORACLE分区表、分区索引详解(转)
- Leetcode: Subsets
- Lightoj 1170 卡特兰数+扩展欧几里得算法
- ARM7 Timer与DMA的register
- mac 10.9 虚拟机分辨率问题
- 网络分析,图挖掘常用数据集:dblp dataset,kdd dataset....
- 什么是I帧,P帧,B帧
- 8 Android gallery
- Shell 函数
- sprintf详解