首页 > 代码库 > Permutations II
Permutations II
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]
, and [2,1,1]
.
class Solution {
public:
vector<vector<int> > permuteUnique(vector<int> &num)
{
//sort num
for(int i=0;i<num.size();i++)
for(int j=i+1;j<num.size();j++)
if(num[i]>num[j])
{
int tmp=num[i];
num[i]=num[j];
num[j]=tmp;
}
vector<vector<int>> result;
int v[num.size()];
generate(result,num,v,0);
return result;
}
void generate(vector<vector<int>>& result,vector<int> num,int* v,int vdep)
{
if(num.size()==0)
{
vector<int> newnum;
for(int i=0;i<vdep;i++)
newnum.push_back(v[i]);
result.push_back(newnum);
return;
}
int index=0;
int size=num.size();
while(index<size)
{
vector<int> newnum;
for(int i=0;i<size;i++)
if(i!=index)
newnum.push_back(num[i]);
v[vdep]=num[index];
generate(result,newnum,v,vdep+1);
//next different num
while(index+1<size && num[index+1]==num[index]) index++;
index++;
}
}
};
public:
vector<vector<int> > permuteUnique(vector<int> &num)
{
//sort num
for(int i=0;i<num.size();i++)
for(int j=i+1;j<num.size();j++)
if(num[i]>num[j])
{
int tmp=num[i];
num[i]=num[j];
num[j]=tmp;
}
vector<vector<int>> result;
int v[num.size()];
generate(result,num,v,0);
return result;
}
void generate(vector<vector<int>>& result,vector<int> num,int* v,int vdep)
{
if(num.size()==0)
{
vector<int> newnum;
for(int i=0;i<vdep;i++)
newnum.push_back(v[i]);
result.push_back(newnum);
return;
}
int index=0;
int size=num.size();
while(index<size)
{
vector<int> newnum;
for(int i=0;i<size;i++)
if(i!=index)
newnum.push_back(num[i]);
v[vdep]=num[index];
generate(result,newnum,v,vdep+1);
//next different num
while(index+1<size && num[index+1]==num[index]) index++;
index++;
}
}
};
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。