class Solution {
public:
vector<vector<int> > subsets(vector<int> &S) {
sort(S.begin(), S.end());
vector<vector<int> > subs{vector<int>()};
for(int i = 0; i < S.size(); ++i) {
vector<vector<int> > newSubs;
for(int j = 0; j < subs.size(); ++j) {
vector<int> entry(subs[j]);
entry.emplace_back(S[i]);
newSubs.emplace_back(entry);
}
for(auto& v:newSubs) {
subs.emplace_back(v);
}
}
return subs;
}
};
class Solution {
public:
vector<vector<int> > subsets(vector<int> &S) {
sort(S.begin(), S.end());
vector<int> saver;
vector<vector<int> > result{saver};
generate(S, 0, result, saver);
return result;
}
void generate(vector<int>& S, int step, vector<vector<int> >& result, vector<int>& saver) {
for(int i = step; i < S.size(); ++i) {
saver.emplace_back(S[i]);
result.emplace_back(saver);
if(i < S.size() - 1) {
generate(S, i + 1, result, saver);
}
saver.pop_back();
}
}
};
Even Better
class Solution {
public:
vector<vector<int> > subsets(vector<int> &S) {
sort(S.begin(), S.end());
vector<vector<int> > subs{vector<int>()};
for(int i = 0; i < S.size(); ++i) {
vector<vector<int> > newSubs;
for(int j = 0; j < subs.size(); ++j) {
vector<int> entry(subs[j]);
entry.emplace_back(S[i]);
newSubs.emplace_back(entry);
}
for(auto& v:newSubs) {
subs.emplace_back(v);
}
}
return subs;
}
};
No comments:
Post a Comment