//DFS,要改变temp和result的值,所以要用到&
//每次循环最后要pop出最后一个元素
class Solution {
private:vector<int>temp;
vector<vector<int>>result;
void sub_set(vector<int> S, vector<int>&temp, vector<vector<int>>&result,int index)
{
result.push_back(temp);
for(int i=index;i<S.size();i++)
{
if(i!=index&&S[i]==S[i-1])
continue;
temp.push_back(S[i]);
sub_set(S,temp,result,i+1);
temp.pop_back();
}
}
public:
vector<vector<int> > subsetsWithDup(vector<int> &S) {
result.clear();
if(S.size()<=0)
return result;
sort(S.begin(),S.end());
sub_set(S,temp,result,0);
return result;
}
};
本文介绍了一种利用深度优先搜索(DFS)算法生成包含重复元素集合的所有子集的方法,并通过递归实现了子集生成的过程。文章重点在于如何避免生成重复的子集,并在每次迭代中正确地增加和移除元素。
500

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



