- 题目描述
给定一个可包含重复数字的序列 nums ,按任意顺序 返回所有不重复的全排列。
- 题解
注意这里只有在不相等的时候才进行交换。
- 代码
class Solution {
public:
vector<vector<int>> permuteUnique(vector<int>& nums) {
int len=nums.size();
if (!len) return vector<vector<int>>(0);
dfs(0,len,nums);
return res;
}
void dfs(int step,int len,vector<int>& nums){
if (step==len){
res.push_back(nums);
return ;
}
for (int i=step;i<len;i++){
bool f=true;
for (int j=i+1;j<len;j++){
if (nums[j]==nums[i]){
f=false;
break;
}
}
if (i==step||(nums[i]!=nums[step]&&f)){
swap(nums[i],nums[step]);
dfs(step+1,len,nums);
swap(nums[i],nums[step]);
}
}
}
vector<vector<int>> res;
};