Permutations II
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:
vector<vector<int>> permuteUnique(vector<int>& nums) {
sort(nums.begin(),nums.end());
vector<int>path;
vector<vector<int>>ans;
int begin=0;
dfs(nums,path,ans,begin);
return ans;
}
void dfs(vector<int> nums, vector<int>&path,vector<vector<int>>&ans,int begin)
{
sort(nums.begin()+begin,nums.end());
int len=nums.size();
if (begin==len)
{
ans.push_back(path);
return ;
}
int pre=INT_MIN;
for (int i=begin; i<len; i++)
{
if (pre==nums[i]) continue;
pre=nums[i];
if (i!=begin&&nums[i]==nums[begin]) continue;
int temp=nums[begin];
nums[begin]=nums[i];
nums[i]=temp;
path.push_back(nums[begin]);
dfs(nums,path,ans,begin+1);
temp=nums[begin];
nums[begin]=nums[i];
nums[i]=temp;
path.pop_back();
}
return ;
}
};