Permutation II--LeetCode
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]
.
思路:思路和前面一篇一样,只不过这里需要注意一点就是对于当前的这个字符,查看是否和以前都一样的,如果有一样的,这个就需要跳过
#include <iostream>
#include <vector>
using namespace std;
/*
一个数组的排列
*/
bool isValid(vector<int>& vec,int begin,int index)
{
int i;
for(i = begin;i<index;i++)
{
if(vec[i] == vec[index])
return false;
}
return true;
}
void Permutation(vector<int>& vec,int begin,int end)
{
int i=0;
if(begin >= end)
{
for(i=0;i<vec.size();i++)
cout<<vec[i]<<" ";
cout<<endl;
return ;
}
for(i=begin;i<=end;i++)
{
if(isValid(vec,begin,i))
{
swap(vec[begin],vec[i]);
Permutation(vec,begin+1,end);
swap(vec[begin],vec[i]);
}
}
}
int main()
{
vector<int> vec(3);
int i;
for(i=0;i<vec.size();i++)
vec[i] = i+1;
vec[1] =1;
int pos =0;
Permutation(vec,pos,2);
return 0;
}
还没有评论,来说两句吧...