题目描述
现在有一个没有重复元素的整数集合S,求S的所有子集
注意:
- 你给出的子集中的元素必须按非递增的顺序排列
- 给出的解集中不能出现重复的元素
例如:
如果S=[1,2,3], 给出的解集应为:
[↵ [3],↵ [1],↵ [2],↵ [1,2,3],↵ [1,3],↵ [2,3],↵ [1,2],↵ []↵]
明显是二进制枚举,就是排序有点恶心
(但好像没有人用二进制写,不知道为什么......)
class Solution {
public:
static int cmp(vector<int>a,vector<int>b)
{
if(a.size()==b.size()) return a<b;
else return a.size()<b.size();
}
vector<vector<int> > subsets(vector<int> &S) {
int sz=S.size();
std::vector<std::vector<int>> ans;
for(int i=0;i<(1<<sz);i++)
{
std::vector<int>tmp;
for(int j=0;j<sz;j++)
{
if(i&(1<<j))
{
tmp.emplace_back(S[j]);
}
}
sort(tmp.begin(),tmp.end());
ans.emplace_back(tmp);
}
sort(ans.begin(),ans.end(),cmp);
return ans;
}
};