做过不知道多少遍了,通过了,也就没想太多,有没有不递归的呢?
// LeetCode_Permutations.cpp : 定义控制台应用程序的入口点。
//
#include "stdafx.h"
#include <iostream>
#include <vector>
using namespace std;
void permute_res(vector<int> &num,int i,int n,vector<int> &onevalue,vector<vector<int> > &ret) {
if(i>=n)
return ;
if (i==n-1)
{
onevalue.push_back(num[i]);
ret.push_back(onevalue);
onevalue.pop_back();
return ;
}
for (int j=i;j<n;j++)
{
swap(num[j],num[i]);
onevalue.push_back(num[i]);
permute_res(num,i+1,n,onevalue,ret);
onevalue.pop_back();
swap(num[i],num[j]);
}
}
vector<vector<int> > permute(vector<int> &num) {
int lennum = num.size();
vector<vector<int> >ret;
vector<int> tempvalue;
permute_res(num,0,lennum,tempvalue,ret);
return ret;
}
int _tmain(int argc, _TCHAR* argv[])
{
vector<int> num;
num.push_back(1);
num.push_back(2);
num.push_back(3);
num.push_back(4);
vector<vector<int> > ret;
ret = permute(num);
vector<vector<int> >::iterator iter1 = ret.begin();
while(iter1 != ret.end())
{
vector<int>::iterator iter2 = (*iter1).begin();
while(iter2 != (*iter1).end())
{
cout<<*iter2<<" ";
iter2++;
}
cout<<endl;
iter1++;
}
system("pause");
return 0;
}
貌似没有

本文探讨了通过递归和非递归方法实现排列算法的过程与区别,详细展示了算法实现步骤,并通过实例代码进行说明。
6246

被折叠的 条评论
为什么被折叠?



