Given a collection of numbers that might contain duplicates, return all possible unique permutations.
For example,
[1,1,2]
have the following unique permutations:
[ [1,1,2], [1,2,1], [2,1,1] ]
Subscribe to see which companies asked this question
运用set来保证每一级不会有重复的,但完成某一级的时候需要clear
static int m[100];
class Solution {
public:
void backtrack(vector<int>& nums,int t,vector<set<int>>&lim,vector<vector<int>>&ans, vector<int> temp)
{
if(t==nums.size())
{
ans.push_back(temp);
return ;
}
else
{
for(int i=0;i<nums.size();++i)
{
if(m[i]==0&&lim[t].find(nums[i])==lim[t].end())
{
m[i]=1;
{
temp.push_back(nums[i]);
lim[t].insert(nums[i]);
backtrack(nums,t+1,lim,ans,temp);
temp.pop_back();
m[i]=0;
}
}
}
lim[t].clear();
return ;
}
}
vector<vector<int>> permuteUnique(vector<int>& nums) {
vector<vector<int>> ans;
vector<int> temp;
vector<set<int>> lim(nums.size(),set<int>());
int t=0;
for(int i=0;i<nums.size();++i)
{
if(lim[t].find(nums[i])==lim[t].end())
{
m[i]=1;
temp.push_back(nums[i]);
lim[t].insert(nums[i]);
backtrack(nums,t+1,lim,ans,temp);
temp.pop_back();
m[i]=0;
}
}
lim[t].clear();
return ans;
}
};