题目:排列数 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); } } }