used数组存放下标,考虑同一层之间的去重和不同层之间的去重
class Solution {
public:
vector<int> path;
vector<vector<int>> result;
vector<int> used;
vector<vector<int>> permuteUnique(vector<int>& nums) {
sort(nums.begin(),nums.end());
used = vector<int>(nums.size());
traverse(nums);
return result;
}
void traverse(vector<int>& nums){
if(path.size()==nums.size()){
result.push_back(path);
return;
}
for(int i=0;i<nums.size();i++){
if(used[i]==1) continue;
if(i>0&&nums[i]==nums[i-1]&&used[i-1]==0) continue;
path.push_back(nums[i]);
used[i]=1;
traverse(nums);
used[i]=0;
path.pop_back();
}
}
};