Vous pouvez ajouter un ensemble, mais c'est lent.
Après avoir lu la solution, cet élagage est bon. Le jugement à l'intérieur du drapeau [i-1], si le drapeau [i-1] = 1, cela signifie que le numéro précédent a été utilisé dans cet arrangement, alors le même numéro peut continuer à être utilisé; si le drapeau [i-1] = 0 Cela signifie que le numéro précédent est déjà dans une autre disposition. Ce numéro ne peut plus être utilisé et sera répété s'il est utilisé.
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();
}
}
}