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]
.
void permute(vector<int> &num, int index, vector<vector<int>> &res)
{
if(index>=num.size()){res.push_back(num);return;}
set<int> swapnum;
swapnum.insert(num[index]);
for(int i = index; i < num.size(); i++)
{
if(index != i)
{
set<int>::iterator it = swapnum.find(num[i]);
if(it != swapnum.end())
continue;
else
swapnum.insert(num[i]);
}
swap(num[index],num[i]);
permute(num,index+1,res);
swap(num[index],num[i]);
}
}
vector<vector<int> > permuteUnique(vector<int> &num) {
// Note: The Solution object is instantiated only once.
vector<vector<int>> res;
permute(num,0,res);
return res;
}