2023.7.23
这道题是上一题全排列 的一个升级版。 唯一区别就是需要增加一个树层去重的操作,因为数组nums中允许有重复的元素了,而上一题没有重复元素。 下面看代码:
class Solution {
public:
vector<vector<int>> ans;
vector<int> path;
void backtrating(vector<int>&nums,vector<bool>&used)
{
if(path.size() == nums.size())
{
ans.push_back(path);
return;
}
for(int i=0 ;i<nums.size(); i++)
{
if(used[i]==true) continue; //树枝上去重
if(i>0 && nums[i]==nums[i-1] && used[i-1]==false) continue; //树层上去重
used[i] = true;
path.push_back(nums[i]);
backtrating(nums,used);
path.pop_back();
used[i] = false;
}
}
vector<vector<int>> permuteUnique(vector<int>& nums) {
vector<bool> used(nums.size(),false);
sort(nums.begin(),nums.end());
backtrating(nums,used);
return ans;
}
};