您的位置:首页 > 编程语言 > Java开发

蓝桥杯 排列数(java题解)

2016-08-16 11:53 417 查看
题目:排列数

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);
}
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  java 蓝桥杯 算法