class Solution {
public:
vector<vector<int> > subsets(vector<int> &S) {
// Start typing your C/C++ solution below
// DO NOT write int main() function
sort(S.begin(), S.end());
vector<vector<int> > res(1);
for (int i=0; i<S.size(); i++) {
int j=res.size()-1;
for (; j>=0; j--) {
res.push_back(res[j]);
res[j].push_back(S[i]);
}
}
return res;
}
};
dfs:
class Solution {
public:
void dfs(vector<int> &S, int d, vector<vector<int> > &res, vector<int> &cur) {
if (d==S.size()) return;
for (int i=d; i<S.size(); i++) {
cur.push_back(S[i]);
res.push_back(cur);
dfs(S,i+1,res,cur);
cur.pop_back();
}
}
vector<vector<int> > subsets(vector<int> &S) {
// IMPORTANT: Please reset any member data you declared, as
// the same Solution instance will be reused for each test case.
vector<vector<int> > res;
if (S.size()==0) return res;
vector<int> cur;
res.push_back(cur);
sort(S.begin(), S.end());
dfs(S, 0, res, cur);
return res;
}
};II
class Solution {
public:
vector<vector<int> > subsetsWithDup(vector<int> &S) {
// Start typing your C/C++ solution below
// DO NOT write int main() function
sort(S.begin(), S.end());
vector<vector<int> > res(1);
int i=0,j=0;
for (;i<S.size(); i++) {
int len=res.size();
for(;j<len; j++) {
res.push_back(res[j]);
res.back().push_back(S[i]);
}
if (S[i]==S[i+1]) {
j=len;
}else {
j=0;
}
}
return res;
}
};dfs:
class Solution {
public:
void dfs(vector<int> &S, int d, vector<vector<int>> &res, vector<int> &cur) {
if (d==S.size()) return;
for (int i=d; i<S.size(); i++) {
if (i>d && S[i]==S[i-1]) continue;
cur.push_back(S[i]);
res.push_back(cur);
dfs(S,i+1,res,cur);
cur.pop_back();
}
}
vector<vector<int> > subsetsWithDup(vector<int> &S) {
vector<vector<int> > res;
if (S.size()==0) return res;
vector<int> cur;
res.push_back(cur);
sort(S.begin(),S.end());
dfs(S,0,res,cur);
return res;
}
};
1780

被折叠的 条评论
为什么被折叠?



