首先可以确定的是字符串全排列算法的时间复杂度至少是O(n!),我们采用递归算法来解决该问题
a.n个元素的全排列 = n-1个元素的全排列 + 另一个元素作为前缀
b.如果只有一个元素的全排列,说明已经排完,输出数组
c.不断将每个元素作为第一个元素,然后以这个元素作为前缀,并将其余元素继续全排列,等到一趟排完,还需要还原数组,继续下一趟
#include <iostream>
#include <vector>
using namespace std;
class Solution {
public:
vector<vector<int> > permute(vector<int> &num)
{
vector<vector<int> > result;
Permution(result,num, 0, num.size()-1);
return result;
}
void Permution(vector<vector<int> > &result, vector<int> &num,
int from, int to)
{
if(from == to)
{
result.push_back(num);
return;
}
for(int i = from; i <= to; i++)
{
swap(num[from], num[i+1]);
Permution(result,num,from+1,to);
swap(num[from], num[i+1]);
}
}
};
int main()
{
Solution s;
vector<int> input{1,2,3};
//cout << input[1];
vector<vector<int> > result;
result = s.permute(input);
for(vector<vector<int> >::iterator it = result.begin(); it != result.end();
it++)
{
for(vector<int>::iterator its = (*it).begin(); its != (*it).end();
its++)
cout << *(its) << " ";
cout << endl;
}
return 0;
}