给定一个可包含重复数字的序列 nums ,按任意顺序 返回所有不重复的全排列。
示例 1:
示例 2:
提示:
方法一:DFS+回溯法(注意每次回溯之前要进行一次排序,保障swap之后仍然是有序数组)
C++提交内容:
class Solution {
public:
    vector<vector<int>> ans;
    void backtrack(vector<int>& nums, int start){
        if(start == nums.size()){
            ans.emplace_back(nums);
            return;
        }
        for(int i = start; i < nums.size(); ++i){
            sort(nums.begin() + start, nums.end());
            if(i > start && nums[i] == nums[i - 1]){
                continue;
            }
            swap(nums[start], nums[i]);
            backtrack(nums, start + 1);
            swap(nums[start], nums[i]);
        }
    }
    vector<vector<int>> permuteUnique(vector<int>& nums) {
        backtrack(nums, 0);
        return ans;
    }
};










