Practice
public:
set<vector<int>>s;
void find(int ind,vector<vector<int>> &ans,vector<int>&nums){
if(ind==nums.size() && s.find(nums)==s.end())
{
ans.push_back(nums);
s.insert(nums);
return;
}
for(int i=ind;i<nums.size();i++)
{
swap(nums[ind],nums[i]);
find(ind+1,ans,nums);
swap(nums[ind],nums[i]);
}
}
vector<vector<int>> permuteUnique(vector<int>& nums) {
vector<vector<int>> ans;
find(0,ans,nums);
// ans.erase(unique(ans.begin(),ans.end()),ans.end());
return ans;
}
public:
set<vector<int>>s;
void find(int ind,vector<vector<int>> &ans,vector<int>&nums){
if(ind==nums.size() && s.find(nums)==s.end())
{
ans.push_back(nums);
s.insert(nums);
return;
}
for(int i=ind;i<nums.size();i++)
{
swap(nums[ind],nums[i]);
find(ind+1,ans,nums);
swap(nums[ind],nums[i]);
}
}
vector<vector<int>> permuteUnique(vector<int>& nums) {
vector<vector<int>> ans;
find(0,ans,nums);
// ans.erase(unique(ans.begin(),ans.end()),ans.end());
return ans;
}