Given a collection of numbers that might contain duplicates, return all possible unique permutations.
For example,
[1,1,2]
have the following unique permutations:
[1,1,2]
, [1,2,1]
, and [2,1,1]
.
class Solution {
public:
vector<vector<int> > permuteUnique(vector<int> &num) {
sort(num.begin(),num.end());
vector<vector <int> > result;
dfs(num,result,0);
return result;
}
private:
void dfs(vector<int> &num,vector<vector <int> > &result ,int cur ){
if(cur==num.size()-1){
result.push_back(num);
return;
}else{
dfs(num,result,cur+1); //自身节点无需交换
for(int i=cur+1;i<num.size();i++){
vector<int>::iterator it =num.begin();
if(find(it+cur,it+i,num[i])!=it+i) //查重
continue;
int temp= num[cur];
num[cur]=num[i];
num[i]= temp;
dfs(num,result,cur+1);
temp= num[cur];
num[cur]=num[i];
num[i]= temp;
}
}
}
};