算法提高 排列数
时间限制:1.0s 内存限制:256.0MB
问题描述
0、1、2三个数字的全排列有六种,按照字母序排列如下:
012、021、102、120、201、210
输入一个数n
求0~9十个数的全排列中的第n个(第1个为0123456789)。
输入格式
一行,包含一个整数n
输出格式
一行,包含一组10个数字的全排列
样例输入
1
样例输出
0123456789
数据规模和约定
0 < n <= 10!
思路:
全排列的题,另开一个数组来一位一位深搜(传递的参数是结果数组的下标)存数据。因此,递归中从第一位0开始依次遍历,并标记当前数组已经存在的值,依题意设置额外结束条件。
(遇到好几次都不会,得记下来了)
import java.util.Arrays;
import java.util.Scanner;
public class Main {
static int cnt, n;
static boolean[] f = new boolean[15];
static int[] arr = new int[15];
public static void main(String[] args) {
Scanner cin = new Scanner(System.in);
n = cin.nextInt();
Arrays.fill(f, false);
dfs(0);
}
private static void dfs(int index) {
if(index == 10) {
cnt ++;
if(cnt == n) {
for(int i=0; i<10; i++)
System.out.print(arr[i]);
System.out.println();
}
}else {
for(int i=0; i<10; i++) {
if(f[i] == false) {
f[i] = true;
arr[index] = i;
dfs(index+1);
f[i] = false;
}
}
}
}
}
如有错误或者不合理的地方,敬请指正~
加油!!