字典序(自己实现next_permutation)

问题:输入n,从小到大输出从1到n,n个数的字典序

 

步骤:

1.初始化,将1~n从小到大存入buf数组

2.n个数的全排列有n!个,则调用n!次,并输出字典序。

3.my_next_permutation实现:

  1. 从后往前遍历buf数组,每次比较buf[i],buf[i+1],找到第一个正序序列,记下此时的下标a=i;
  2. 从a开始往后遍历,找到后n-a-1个数中大于buf[a]且最小的数,记下其下标b
  3. 调换buf[a],buf[b]
  4. 数组元素从a+1到n逆序

下面是代码实现:

#include 
#include 

using namespace std;


int factorial(int n) {//计算阶乘
	int result = 1;
	for (int i = 2; i <= n; i++) {
		result *= i;
	}
	return result;
}

void my_next_permutation(int *buf,int n) {//计算字典序
	int a;
	for(int i=n-2; i>=0; i--) {//从后往前遍历,找到a
		if(buf[i]buf[a]&&buf[i]>n;
	for(int i=0; i

 

你可能感兴趣的:(C++)