和46题类似,只需要改动一个地方,避免相同序列的排列
这里要用set
加入一个判断,如果set存在当前序列,跳过本次循环(用continue),每遍历一个排列,便把它加入set中。
class Solution {
public:
vector<vector<int>> permuteUnique(vector<int>& nums) {
vector<vector<int>> result;
f(nums,0,result);
return result;
}
void f(vector<int> &nums,int n,vector<vector<int>> &result)
{
if(n>=nums.size())
{
result.push_back(nums);
return ;
}
unordered_set<int> set;
for(int i=n;i<nums.size();i++)
{
if (set.count(nums[i]) > 0)
continue;
set.insert(nums[i]);
swap(nums[n],nums[i]);
f(nums,n+1,result);
swap(nums[n],nums[i]);
}
}
};