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> > sets;
vector<int> set;
sets.push_back(set);
dfs(0, 0, S.size(), S, set, sets);
return sets;
}
void dfs(int beg, int dep, int n, const vector<int> &S, vector<int> &vec, vector<vector<int> > &sets)
{
if (dep < n && beg < n)
{
int pos = beg + 1;
while (pos < n && S[pos] == S[pos - 1])
{
++pos;
}
int len = pos - beg;
//对于个数为len的元素,要么不选,要么选1个,2个, ... ,len个
for (int i = 0; i <= len; ++i)
{
dfs(pos, dep + i, n, S, vec, sets);
if (i < len)
{
vec.push_back(S[beg]);
sets.push_back(vec);
}
//for (int j = pos; j < n && S[j] != S[j - 1]; ++j)
//{
//dfs(j, dep + i, n, S, vec, sets);
//}
}
for (int i = 0; i < len; ++i)
{
vec.pop_back();
}
}
}
};
Subsets II
最新推荐文章于 2024-07-23 17:36:37 发布