题意
求一个含重复元素的序列的全排列
思路
根据求最小字典序的思路,对序列进行去重的同时进行交换 DFS 求得序列.
代码
class Solution {
public:
vector<vector<int>> permuteUnique(vector<int>& nums) {
vector<vector<int> >ans;
sort(nums.begin(), nums.end());
DFS(ans, nums, 0);
return ans;
}
void DFS(vector<vector<int> >& ans, vector<int>& nums, int id){
if(id == nums.size()){
ans.push_back(nums);
return ;
}
DFS(ans, nums, id + 1);
for(int i = id + 1; i < nums.size(); i++){
int j;
for(j = id; j < i; j++){
if(nums[j] == nums[i])
break;
}
if(j < i) continue;
swap(nums[i], nums[id]);
DFS(ans, nums, id + 1);
swap(nums[i], nums[id]);
}
}
};