这题难点在于先排序,然后重复的数字112 used[i-1]= fase 代表之前我用过了,就是我俩 1前面的用过了现在这一个我就直接跳过去
class Solution {
public:
vector<bool> used;
vector<vector<int>> permuteUnique(vector<int>& nums) {
sort(nums.begin(),nums.end());
vector<vector<int>>ans;
if(nums.size() == 0)return ans;
vector<bool> used(nums.size(),false);
this->used = used;
vector<int>tmp;
dfs(nums,tmp,ans,0);
return ans;
}
void dfs(vector<int>& nums,vector<int>& tmp,vector<vector<int>>& ans,int start)
{
if(tmp.size() == nums.size())
{
ans.push_back(tmp);
return;
}
for(int i = 0; i < nums.size(); i++)
{
if(used[i] || (i > 0 && nums[i] == nums[i-1] && !used[i-1]))continue;
else
{
tmp.push_back(nums[i]);
used[i] = true;
dfs(nums,tmp,ans,0);
used[i] = false;
tmp.pop_back();
}
}
}
};