思路和上题类似,主要是最后的去重问题,由于要保留原来的顺序,因此可利用set来起到去重的同时不排序,
sort(vv.begin(),vv.end()),sort对容器排序是根据容器内起始元数的大小进行排序的,并不是根据容器中元数的个数进行排序。
set(vv.begin(),vv.end()),set、map等在对容器进行排序时并不起作用,但是可以达到去重的目的。
class Solution {
public:
vector<vector<int> > subsetsWithDup(vector<int> &S) {
int len=S.size();
if(len<=0){
return{};
}
sort(S.begin(),S.end());
vector<vector<int>>vv;
vector<int>v;
vv.push_back(v);
for(int i=0;i<len;i++){
int n=vv.size();
for(int j=0;j<n;j++){
vector<int>temp=vv[j];
temp.push_back(S[i]);//见后面同类题目
vv.push_back(temp);
}
}
set<vector<int>> sets(vv.begin(),vv.end());
vector<vector<int>> result(sets.begin(),sets.end());
return result;
}
};