给定一个可包含重复数字的序列 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;
}
};