class Solution {
public:
vector<int> res;
vector<vector<int>> ans;
vector<bool> isUsed;
void backtracking(vector<int> &num){
if(res.size() == num.size()){
ans.push_back(res);
return;
}
for(int i = 0; i < num.size();++i){
if(isUsed[i] == true || (i >= 1 && num[i] == num[i-1] && isUsed[i-1] == false))continue;
isUsed[i] = true;
res.push_back(num[i]);
backtracking(num);
res.pop_back();
isUsed[i] = false;
}
}
vector<vector<int> > permuteUnique(vector<int> &num) {
sort(num.begin(),num.end());
isUsed.resize(num.size(),false);
backtracking(num);
return ans;
}
};