蓝桥杯练习题_001_全排列问题
-
问题: 给定n个字符,将这n个字符全排列有n!种情况,例如:给定三个字符ABC,则有ABC,ACB,BCA,BAC,CAB,CBA共321=6种情况。请输出给定字符个数时,所有的全排列情况,以及总个数。
-
关键: 学会使用Vector向量类,利用递归的思想就行求解。简单介绍下Vector类:实现了一个动态数组,类似于ArrayList。和 ArrayList 很相似,但是两者是不同的:
Vector 是同步访问的。
Vector 包含了许多传统的方法,这些方法不属于集合框架。
Vector 主要用在事先不知道数组的大小,或者只是需要一个可以改变大小的数组的情况。
其中常用的方法:
//声明两个向量组
Vector<Character> a = new Vector<Character>();
Vector<Character> b = new Vector<Character>();
a.add('a'); //添加元素
a.add('b');
b.add('c');
for (int i = 0; i < 3; i++) {
b.add(a.elementAt(i)); //把数组b中第i个元素添加到数组a中
a.remove(i); //去除元素
代码演示:
package lqc_2_13_001_全排列;
import java.util.Scanner;
import java.util.Vector;
public class Question1 {
public static long count=0;
private void fullPermutation(Vector<Character> sourse, Vector<Character> result) {
if(sourse.size()==0){
for (int i = 0; i < result.size(); i++) {
System.out.print(result.elementAt(i));
}
System.out.print("\n");
count++;
return;
}
for (int i = 0; i < sourse.size(); i++) {
Vector<Character>tsourse=new Vector<Character>(sourse);
Vector<Character>tresult=new Vector<Character>(result);
tresult.add(sourse.elementAt(i));
tsourse.remove(i);
new Question1().fullPermutation(tsourse, tresult);
}
}
public static void main(String[] args) {
Scanner scanner=new Scanner(System.in);
int n=scanner.nextInt();
Vector<Character> sourse=new Vector<Character>();
Vector<Character> result=new Vector<Character>();
for (int i = 0; i < n; i++) {
sourse.add((char)('A'+i));
}
// 当读不懂程序时,不妨增添一些语句来查看数组中的元素,如下:
// for (int i = 0; i < sourse.size(); i++) {
// System.out.println(sourse.elementAt(i));
// System.out.println(result);
// }
//
new Question1().fullPermutation(sourse, result);
System.out.println(Question1.count);
}
}