Given a set of distinct integers, S, 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 S = [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> &S) {
vector<vector<int> > results;
results.push_back(vector<int>());
if(S.size() == 0) return results;
sort(S.begin(), S.end());
for(int ii = 1; ii <= S.size(); ii ++) {
vector<int> current;
for(int jj = 0; jj < ii; jj ++) {
current.push_back(S[jj]);
}
while(current.size() == ii) {
results.push_back(current);
int pos = ii - 1;
while(pos >= 0) {
if(current[pos] < S[S.size() - 1]) {
int kk = 0;
for(; kk < S.size(); kk ++) {
if(S[kk] == current[pos])
break;
}
if(ii - 1 - pos < S.size() - 1 - kk)
break;
}
pos --;
}
if(pos < 0)
break;
int posins = 0;
while(posins < S.size()) {
if(current[pos] == S[posins])
break;
posins ++;
}
posins ++;
for(int kk = pos; kk < current.size(); kk ++) {
current[kk] = S[posins++];
}
}
}
return results;
}
};