您的位置:首页 > 其它

Leetcode 78 Subsets

2016-09-23 18:24 381 查看
Given a set of distinct integers, nums, return all possible subsets.

Note: 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],
[]
]

求出给定集合的所有子集。

先贴上我的迭代深搜

class Solution {
public:
vector<vector<int>> subsets(vector<int>& nums) {
vector<vector<int>> result(1);
for(int i=0;i<nums.size();i++)
{
int limit=result.size();
for(int j=0;j<limit;j++)
{
vector<int> temp=result[j];
temp.push_back(nums[i]);
result.push_back(temp);
}
}
return result;
}
};

DFS可以做,但是看到这题有更新颖的做法,

将集合中包含的数用二进制表示,1表示有,0表示没有,总共需要遍历2^n次。

class Solution {
public:
vector<vector<int> > subsets(vector<int> &S) {
vector< vector<int> > result;
sort(S.begin(), S.end());
// Loop from 0 to 2^n - 1
for (int x = 0; x < (1 << S.size()); ++x) {
vector<int> sln;
for (int i = 0; i < S.size(); ++i)
// If the i-th least significant bit is 1, then choose the i-th integer
if (x & (1 << i))
sln.push_back(S[i]);
result.push_back(sln);
}
return result;
}
};
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: