Puede agregar conjunto, pero es lento.
Después de leer la solución, esta poda es buena. El juicio dentro de la bandera [i-1], si la bandera [i-1] = 1, significa que el número anterior se ha utilizado en esta disposición, entonces el mismo número puede continuar usándose; si la bandera [i-1] = 0 Esto significa que el número anterior ya está en otra disposición. Este número ya no se puede usar y se repetirá si se usa.
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();
}
}
}