class Solution {
public:
vector<int>v1;
vector<vector<int>>v;
vector<vector<int> > permuteUnique(vector<int> &num)
{
v.clear();
sort(num.begin(),num.end());
backtrace(0,num);
return v;
}
void backtrace(int depth,vector<int> &num)
{
if(depth==num.size())
{
v1.clear();
for(int i=0;i<num.size();i++)
{
v1.push_back(num[i]);
}
v.push_back(v1);
}
if(depth<num.size())
{
for(int i=depth+1;i<num.size();i++)
{
bool equal=false;
for(int j=depth;j<i;j++)
{
if(num[i]==num[j])
equal=true;
}
if(!equal)
{
swap(num[depth],num[i]);
backtrace(depth+1,num);
swap(num[depth],num[i]);
}
}
backtrace(depth+1,num);
}
}
};