class Solution {
public:
void permuteUnique_aux(vector<int> &s,int pos,vector<vector<int>> &ret,vector<int> &tmp,vector<bool>&isselected)
{
if(pos==s.size())
{
ret.push_back(tmp);
return;
}
for(int i=0;i<s.size();i++)
{
if(isselected[i]||s[i]==s[i-1]&&isselected[i-1]&&i!=0)
continue;
isselected[i]=true;
tmp.push_back(s[i]);
permuteUnique_aux(s,pos+1,ret,tmp,isselected);
tmp.pop_back();
isselected[i]=false;
}
}
vector<vector<int> > permuteUnique(vector<int> &num) {
sort(num.begin(),num.end());
vector<vector<int>> ret;
vector<int> tmp;
vector<bool> isselected(num.size(),false);
permuteUnique_aux(num,0,ret,tmp,isselected);
return ret;
}
};
public:
void permuteUnique_aux(vector<int> &s,int pos,vector<vector<int>> &ret,vector<int> &tmp,vector<bool>&isselected)
{
if(pos==s.size())
{
ret.push_back(tmp);
return;
}
for(int i=0;i<s.size();i++)
{
if(isselected[i]||s[i]==s[i-1]&&isselected[i-1]&&i!=0)
continue;
isselected[i]=true;
tmp.push_back(s[i]);
permuteUnique_aux(s,pos+1,ret,tmp,isselected);
tmp.pop_back();
isselected[i]=false;
}
}
vector<vector<int> > permuteUnique(vector<int> &num) {
sort(num.begin(),num.end());
vector<vector<int>> ret;
vector<int> tmp;
vector<bool> isselected(num.size(),false);
permuteUnique_aux(num,0,ret,tmp,isselected);
return ret;
}
};