leetcode相关C++算法解答: https://github.com/Nereus-Minos/C_plus_plus-leetcode
一、不含重复元素的全排列
算法思路:
(1)n个元素的全排列=(n-1个元素的全排列)+(另一个元素作为前缀);
(2)出口:如果只有一个元素的全排列,则说明已经排完,则输出数组;
(3)不断将每个元素放作第一个元素,然后将这个元素作为前缀,并将其余元素继续全排列,等到出口,出口出去后还需要还原数组
void swap(vector<int>&a, int i, int j)
{
int temp;
temp = a[j];
a[j] = a[i];
a[i] = temp;
}
void prem(vector<int>&a, int start, int end, vector<vector<int>>&ret)
{
if(start == end)
{
vector<int>::iterator iter;
for(iter=a.begin(); iter<a.end(); iter++)
{
cout << (*iter) << " ";
}
cout<<endl;
ret.push_back(a);
return ;
}
else
{
for(int i = start; i <= end; i++)
{
swap(a, start, i);
prem(a, sta