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;}
};