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], [2,1,1] ]
代码如下:
class Solution {
public:
void swap(vector<int>& nums,int i,int j)
{
if(i!=j)
{
nums[i] ^= nums[j];
nums[j] ^= nums[i];
nums[i] ^= nums[j];
}
}
void accumlate(vector<vector<int>>& res,vector<int> nums,int begin)
{
if(begin == nums.size()-1)
{
res.push_back(nums);
return;
}
for(int i=begin;i<nums.size();i++)
{
if(begin != i&&nums[begin] == nums[i])
continue;
swap(nums,begin,i);
accumlate(res,nums,begin+1);
}
}
vector<vector<int>> permuteUnique(vector<int>& nums) {
sort(nums.begin(),nums.end());
vector<vector<int>> res;
accumlate(res,nums,0);
return res;
}
};