leetcode-Subsets
2015-05-18 18:51
197 查看
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 =
a solution is:
求一个数组的子集,要求每个子集内元素升序;
先将数组进行从小到大排序,再利用位运算枚举每种情况。
例如n个数字,有2^n个子集。即n个数字的组合情况,可用n个bits进行表示,bit位与数组是一一对应;
判断每个bit是否为1 进行枚举。
class Solution {
public:
vector<vector <int> > subsets(vector<int>& nums) {
sort(nums.begin(),nums.end());
vector< vector<int> > ans;
int n = nums.size();
int i = 0,j= 0;
for(i = 0;i< 1 << n;i++)
{
vector<int> temp;
int index = 0;
int count = i;
while(count != 0)
{
if(count & 1 == 1)
{
temp.push_back(nums[index]);
}
index++;
count = count >> 1;
}
ans.push_back(temp);
}
return ans;
}
};
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], []]
求一个数组的子集,要求每个子集内元素升序;
先将数组进行从小到大排序,再利用位运算枚举每种情况。
例如n个数字,有2^n个子集。即n个数字的组合情况,可用n个bits进行表示,bit位与数组是一一对应;
判断每个bit是否为1 进行枚举。
class Solution {
public:
vector<vector <int> > subsets(vector<int>& nums) {
sort(nums.begin(),nums.end());
vector< vector<int> > ans;
int n = nums.size();
int i = 0,j= 0;
for(i = 0;i< 1 << n;i++)
{
vector<int> temp;
int index = 0;
int count = i;
while(count != 0)
{
if(count & 1 == 1)
{
temp.push_back(nums[index]);
}
index++;
count = count >> 1;
}
ans.push_back(temp);
}
return ans;
}
};
相关文章推荐
- LeetCode: Subsets
- LeetCode No.78 Subsets
- [LeetCode] Partition to K Equal Sum Subsets
- Leetcode--Subsets
- leetcode 078 —— Subsets
- LeetCode-78-Subsets 水题暴力
- LeetCode 78 Subsets (DFS 或 状态压缩)
- LeetCode | Subsets
- LeetCode Subsets (DFS)
- [leetcode 78] Subsets
- LeetCode : Subsets
- Leetcode 78. Subsets
- LeetCode:Subsets
- LeetCode-78-Subsets(回溯法)-Medium
- LeetCode题解:Subsets I and II
- LeetCode:Subsets
- Leetcode-subsets
- Leetcode-78. Subsets
- LeetCode-Subsets & Subsets II
- [LeetCode] Subsets