问题描述:
0、1、2三个数字的全排列有六种,按照字母序排列如下:
012、021、102、120、201、210
输入一个数n
求0~9十个数的全排列中的第n个(第1个为0123456789)。
输入说明 :
一行,包含一个整数n
输出说明 :
一行,包含一组10个数字的全排列
输入范例 :
3
输出范例 :
0123456879
思路:
这题和往常题稍微不一样的一点是,并不是要判断当前填充数字位数的下标,而是判断某一位数是否被使用过
代码实现:
#include<bits/stdc++.h>
using namespace std;
int n;
bool *visit;
int res[10],curr[10];
void DFS(int k)
{
if(k==10)
{
n--;
}
if(n==0)
{
for(int i=0;i<10;i++)
res[i]=curr[i];
return;
}
for(int i=0;i<10 && n!=0;i++)
{
if(visit[i]) continue;
visit[i]=true;
curr[k]=i;
DFS(k+1);
curr[k]=0;
visit[i]=false;
}
}
int main()
{
cin>>n;
visit=new bool[10];
fill(visit,visit+10,false);
DFS(0);
for(int i=0;i<10;i++)
cout<<res[i];
cout<<endl;
}