问题描述
对于给定的正整数n(n≥1),求1~n的所有全排列。
问题求解
代码
vector<vector<int>> ps;
void Insert(vector<int> s, int i, vector<vector<int>> &ps1)
{
vector<int> s1;
vector<int>::iterator it;
for (int j = 0; j < i; j++)
{
s1 = s;
it = s1.begin() + j;
s1.insert(it, i);
ps1.push_back(s1);
}
}
void Perm(int n)
{
vector<vector<int>> ps1;//临时存放子排列
vector<vector<int>>::iterator it;
vector<int> s, s1;
s.push_back(1);
ps.push_back(s);
for (int i = 2; i <= n; i++)
{
ps1.clear();
for (it = ps.begin(); it != ps.end(); it++)
Insert(*it, i, ps1);
ps = ps1;
}
}
算法分析
对于给定的正整数n,每一种全排列都必须处理,有n!种,所以上述算法的时间复杂度为O(n*n!)。