模拟进出栈,即可。
#include<cstdio>
#include<iostream>
using namespace std;
int st[50],top = -1,n,num = 0;
int a[50],z = 0;
void calc(int k){
if(num==20) {return ;}
if(k==n + 1){
for(int i = 0;i < z;i++) cout<<a[i];
for(int i = top;i >= 0;i--) cout<<st[i];
cout<<endl;
num++;
return ;
}
if(top!=-1){
a[z++] = st[top--];
calc(k);
st[++top] = a[--z];
}
st[ ++top] = k;
calc(k+1);
top--;
}
int main(){
cin>>n;
calc(1);
return 0;
}