蓝桥杯 排列数(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!
题解:递归遍历
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); } } }
相关文章推荐
- 蓝桥杯 Anagrams问题(java题解)
- 蓝桥杯 最小乘积【基本型】(java题解)
- 蓝桥杯第七届决赛真题大全题解(java版本)
- 蓝桥杯 数字三角形(java题解)
- 算法笔记_099:蓝桥杯练习 算法提高 排列数(Java)
- 蓝桥杯 黄金连分数(java题解)
- 蓝桥杯 Torry的困惑(基本型)(java题解)
- 蓝桥杯 奇妙的数字(java题解)
- 蓝桥杯 黄金连分数(java题解)
- 蓝桥杯 ADV-188 算法提高 排列数(java) 深度优先搜索 DFS
- 蓝桥杯 生物芯片(java题解)
- 蓝桥杯 出现次数最多的整数(java题解)
- 蓝桥杯 颠倒的价牌(java题解)
- 蓝桥杯 幸运数(java题解)
- 2018第九届蓝桥杯JAVA C组 第三题 字母阵列 题解
- 蓝桥杯 出栈次序(java题解)
- 算法提高 排列数 JAVA 蓝桥杯练题系统
- 蓝桥杯 从我做起振兴中华(java题解)
- 蓝桥杯 日期计算(java题解)
- 蓝桥杯 未名湖畔的烦恼(java题解)