https://leetcode.cn/problems/permutations-ii/

上一题(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;
}