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); } } };