题目描述:
给定一个可包含重复数字的序列 nums
,按任意顺序 返回所有不重复的全排列。
解题思路:
简单递归就可以完成,用visit数组标记数字是否已添加,用set去除重复的排列。
class Solution {
public:
vector<vector<int>> permuteUnique(vector<int>& nums) {
if(nums.size()==0) return vector<vector<int>>();
visit.assign(nums.size(),0);
help(nums);
return vector<vector<int>>(ans.begin(),ans.end());
}
void help(vector<int>& nums){
if(res.size()==nums.size()){
ans.insert(res);
return;
}
for(int i=0;i<nums.size();i++){
if( visit[i]==0){
visit[i] = 1;
res.push_back(nums[i]);
help(nums);
res.pop_back();
visit[i] = 0;
}
}
}
private:
vector<int> res;
vector<bool> visit;
set<vector<int>> ans;
};