You can add set, but it is slow.
After reading the solution, this pruning is good. The judgment inside flag [i-1], if flag [i-1] = 1, it means that the previous number has been used in this arrangement, then the same number can be used continuously; if flag [i-1] = 0 This means that the previous number is already in another arrangement. This number can no longer be used, and will be repeated if used.
vector<vector<int>> permuteUnique(vector<int>& nums) {
vector<vector<int>>ans;
vector<int>flag(nums.size(),0);
vector<int>tep;
sort(nums.begin(),nums.end());
dfs(ans,nums,flag,tep);
return ans;
}
void dfs(vector<vector<int>>& ans,vector<int> nums,vector<int>& flag,vector<int> tep){
if(tep.size()==nums.size()){
ans.push_back(tep);
return;
}
for(int i=0;i<nums.size();i++){
if(flag[i]==0){
if(i>0&&nums[i]==nums[i-1]&&flag[i-1]==0){
continue;
}
flag[i]=1;
tep.push_back(nums[i]);
dfs(ans,nums,flag,tep);
flag[i]=0;
tep.pop_back();
}
}
}