算法提高 排列数 JAVA 蓝桥杯练题系统

问题描述
  0、1、2三个数字的全排列有六种,按照字母序排列如下:
  012、021、102、120、201、210
  输入一个数n
  求0~9十个数的全排列中的第n个(第1个为0123456789)。
输入格式
  一行,包含一个整数n
输出格式
  一行,包含一组10个数字的全排列
样例输入
1
样例输出
0123456789
数据规模和约定
  0 < n <= 10!


import java.util.*;
public class Main {


static int sum=0;
static int a[]=new int[10];
static int vis[]=new int[10];
public static void main(String[] args) {
// TODO Auto-generated method stub


Scanner input=new Scanner(System.in);
for(int i=0;i<=9;i++)
vis[i]=0;
int n=input.nextInt();
dfs(n,0);
}

public static void dfs(int n,int pos)
{
if(pos==10)
{
sum++;
if(sum==n)
{
for(int i=0;i<10;i++)
System.out.print(a[i]);
}
}

for(int i=0;i<=9;i++)
{
if(vis[i]==0)
{
a[pos]=i;
vis[i]=1;
dfs(n,pos+1);
vis[i]=0;
}
}
}


}


你可能感兴趣的:(算法)