现在有一个没有重复元素的整数集合S,求S的所有子集
注意:
你求出的所有子集中的元素必须按升序排列。
示例1
输入:
[1,2,3]
返回值:
[[],[1],[2],[3],[1,2],[1,3],[2,3],[1,2,3]]
示例2
输入:
[]
返回值:
[]
class Solution {
public:
vector<vector<int> > ans;
vector<vector<int> > subsets(vector<int> &S) {
vector<int> tmp;
sort(S.begin(), S.end());
subs(S,0,tmp);
// 结果排序
sort(ans.begin(), ans.end(), [](const vector<int> &a, const vector<int> &b) -> bool
{
return a.size()==b.size()?a<b:a.size()<b.size();
});
return ans;
}
// subs(s,is,tmp) s中以is位置开头的集合的子集
void subs(vector<int> &s, int is, vector<int> &tmp){
ans.push_back(tmp);
for(int i = is; i<s.size(); i++){
tmp.push_back(s[i]);
subs(s, i+1, tmp); // i元素对所有后面子集结合
tmp.pop_back();
}
}
};
// sort 重写
sort(ans.begin(),ans.end(), [](const vector<int> &a, const vector<int> &b)->bool
{
return a.size()==b.size()?a<b:a.size()<b.size();
}
)