有重复元素
class Solution {
public:
vector<vector<int> > subsetsWithDup(vector<int> &S) {
vector<vector<int>> res;
vector<int> emp;
res.push_back(emp);//add empty set
if(S.empty()){
return res;
}
sort(S.begin(),S.end());//non-descending order
int prev_i=0;//记录上一次加入的子集们的起始index
for(vector<int>::iterator it=S.begin();it<S.end();it++){
//如果S的当前元素和前一个元素相同,只拷贝上次加进来的子集
int start=(it!=S.begin()&&*it==*(it-1)?prev_i:0);
int end=res.size();
for(int i=start;i<end;i++){
vector<int> tmp;
for(vector<int>::iterator itr=res[i].begin();itr<res[i].end();itr++){
tmp.push_back(*itr);
}
tmp.push_back(*it);
res.push_back(tmp);
}
prev_i=end;//update the index
}
return res;
}
};