题目:
给定一个可包含重复数字的序列,返回所有不重复的全排列。
示例:
输入: [1,1,2] 输出: [ [1,1,2], [1,2,1], [2,1,1] ]
思路:
dfs+去重。
代码如下:
class Solution {
public:
map<string,int>ma;
vector<vector<int>> ans;
int vis[1005],Size;
void dfs (string s,int num,vector<int>& nums,vector<int> v)
{
if(ma[s]==0&&num==Size)
{
ma[s]=1;
ans.push_back(v);
return;
}
for (int i=0;i<Size;i++)
{
int t=nums[i];
if(!vis[i])
{
vis[i]=1;
v.push_back(t);
dfs(s+(char)(t+'0'),num+1,nums,v);
v.pop_back();
vis[i]=0;
}
}
}
vector<vector<int>> permuteUnique(vector<int>& nums) {
sort(nums.begin(),nums.end());
memset (vis,0,sizeof(vis));
vector<int> v;
Size=nums.size();
if(Size==0)
return ans;
dfs("",0,nums,v);
return ans;
}
};