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]
.
Have you met this question in a real interview?
DFS,并且去掉这样的情况:
某个数和上一个数相等,但是上一个数却没有被遍历到---->也就是说,结果中改变了源中数的顺序。
vector<int> temp;
unordered_set<int> m;
vector<vector<int> > result;
void dfs(int level,vector<int> &num){
if(level==num.size()){
result.push_back(temp);
return;
}
for(int i=0;i<num.size();i++){
if(m.find(i)!=m.end())
continue;
if(i>0 && num[i]==num[i-1] && m.find(i-1)==m.end())
continue;
temp.push_back(num[i]);
m.insert(i);
dfs(level+1,num);
temp.pop_back();
m.erase(i);
}
}
vector<vector<int> > permuteUnique(vector<int> &num) {
sort(num.begin(),num.end());
dfs(0,num);
return result;
}