排列数

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

import java.util.Arrays;
import java.util.Scanner;

public class 排列数 {
    static int[] num=new int[10];
    static boolean[] vis=new boolean[10];
    static int n;
    public static void main(String arg[]){
        Arrays.fill(num, 0);
        Arrays.fill(vis, false);
        Scanner input=new Scanner(System.in);
        n=input.nextInt();
        bfs(0);
    }
    private static void bfs(int p)  //p当前位数
    {  
        if(p==10)  
        {  
            n--;  
            if(n==0) 
            {  
                for(int i=0;i<=9;i++)  
                System.out.print(num[i]);  
            }  
            return ;  
        }  
        for(int i=0;i<=9;i++) //i数字0-9 
        {  
            if(!vis[i])  
            {  
                num[p]=i;  
                vis[i]=true;  
                bfs(p+1);  //按照顺序会先找到所有数都选的情况,再从最后一位数字退出
                vis[i]=false;  
            }  
        }  
    }  
}
原文地址:https://www.cnblogs.com/ljs-666/p/8595633.html