我们将所有的排列按照如下规则进行排序:
如果长度不同,那么长度小的排前面;否则,字典序小的排前面。
请找到按照这个规则排序得到的第n 个排列。
输入格式:
一个正整数表示 n。
输出格式
一个序列表示答案。
样例输入1:
6
样例输出1:
2 1 3
这样是TLE,望帮忙改正
#include <cstdio>
#include <cstdlib>
#include <iostream>
#include <algorithm>
using namespace std;
int jiecheng(int x){
int y=1;
for(int i=1;i<=x;i++){
y*=x;
}
return y;
}
int a[1000]={0};//保存数列的数组,默认每个位置都是0
int book[1000]={0};//记录一个数有没有在数组里
int n,x=-1;//1~n
int k;
void A(int pos)//向a[pos]填数
{
if(pos==k+1)//递归边界
{ x++;
if(x==n){
for(int i=1;i<=k;i++)//输出数列
printf("%d ",a[i]);
printf("\n");
}
return;
}
for(int i=1;i<=k;i++)
{
if(book[i]==0)//如果i没有在数组里面
{
a[pos]=i;
book[i]=1;
A(pos+1);//向a[pos+1]填数
a[pos]=0;
book[i]=0;//收回,试下一个数
}
}
}
int main()
{
// freopen("in.txt","r",stdin);
int s=0;
scanf("%d",&n);
for(k=0;k<n;k++){
A(1);
}
return 0;
}