上一题(46. 全排列 )加上两行树层去重的代码即可
vector<bool> used;
vector<int> cur;
vector<vector<int>> ans;
void backtracking(vector<int>& nums) {
if (cur.size() == nums.size()) {
ans.push_back(cur);
}
for (int i = 0; i < nums.size(); ++i) {
if (used[i]) {
continue;
}
used[i] = true;
cur.push_back(nums[i]);
backtracking(nums);
cur.pop_back();
used[i] = false;
// 树层去重
while (i + 1 < nums.size() && nums[i + 1] == nums[i]) {
++i;
}
}
}
vector<vector<int>> permuteUnique(vector<int>& nums) {
used = vector<bool>(nums.size(), false);
std::sort(nums.begin(), nums.end());
backtracking(nums);
return ans;
}