class Solution {
public:
vector<vector<int>> subsetsWithDup(vector<int> &S) {
vector<vector<int> > res(1, vector<int>());
sort(S.begin(), S.end());
vector<int> set;
int N = S.size();
for (int l = 1; l <= N; ++l)
subsetsWithDupRe(S, l, 0, set, res);
return res;
}
//this function generates all the subsets of length L to be stored in set.
void subsetsWithDupRe(vector<int> &S, int L, int start, vector<int> &set, vector<vector<int>> &res)
{
int N = S.size(), M = set.size();
if (M == L) {
res.push_back(set);
return;
}
for (int i = start; i <= N - (L - M); ++i) {
if (i > start && S[i] == S[i-1]) continue;
set.push_back(S[i]);
subsetsWithDupRe(S, L, i + 1, set, res);
set.pop_back();
}
}
};
No comments:
Post a Comment