题目:排列数
0、1、2三个数字的全排列有六种,按照字母序排列如下:
012、021、102、120、201、210
输入一个数n,求0~9十个数的全排列中的第n个(第1个为0123456789)。
输入格式
一行,包含一个整数n
输出格式
一行,包含一组10个数字的全排列样例输入1样例输出0123456789数据规模和约定
0 < n <= 10!
题解:递归遍历
//for循环里若不在新的ArrayList()中操作, 进入下一个循环时两个数组都是改变了的
import java.util.*;
public class Main{
public static int count = 0;
public static int n = 0;
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
n = in.nextInt();
ArrayList<Integer> list = new ArrayList<Integer>();
for(int i=0;i<10;i++) {
list.add(i);
}
f(list, new ArrayList<Integer>());
}
public static void f(ArrayList<Integer> a, ArrayList<Integer> b) {
if(b.size() == 10) {
count ++;
if(count == n) {
for(Integer i : b) {
System.out.print(i.toString());
}
System.exit(0);
}
return;
}
for(int i=0;i<a.size();i++) {
ArrayList<Integer> c = new ArrayList<Integer>(a);
ArrayList<Integer> d = new ArrayList<Integer>(b);
d.add(a.get(i));
c.remove(i);
f(c, d);
}
}
}