package com.yq1012.test;
import java.util.Scanner;
import java.util.Vector;
/**
* @author Administrator
*
* 1算法是这样的,如果给定N个不同字符,将这N个字符全排列,最终的结果将会是N!种。如:给定
* A、B、C三个不同的字符,则结果为:ABC、ACB、BAC、BCA、CAB、CBA一共3!=3*2=6种情况。
*/
public class Qeustion1 {
/*
* 算法是这样的,如果给定N个不同字符,将这N个字符全排列 ,最终的结果将会是N!种。如:给定 A、B、C三个不同的字符,
* 则结果为:ABC、ACB、BAC、BCA、CAB、CBA一共3!=3*2=6种情况
*/
// 2 ab ba 3 ABC、ACB、BAC、BCA、CAB、CBA
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 Qeustion1().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));
}
new Qeustion1().fullPermutation(sourse, result);
System.out.println(Qeustion1.count);
}
}/*
* 首先你要弄清楚sourse 里面装的什么, int n=scanner.nextInt(); n 是你输入的数字, 如果你输入 100. 那么,
* for (int i = 0; i < n; i++) { sourse.add((char)('A'+i)); } sourse 里面就有100
* 个数据 A1,A2,A3....A100. 这样. 然后进入到fullPermutation() 方法,
*
* 初始进入的时候 sourse.size 是不可能=0 的. 所以往下走, 进入下面这个代码
*
* for (int i = 0; i < sourse.size(); i++) { 这个地方sourse.size() 其实就是等于你输入的N ,
* 就是100 ,
*
* Vector<Character>tsourse=new Vector<Character>(sourse); 创建一个新的 tsourse
* 对象, new 的时候传值, 调用构造方法。 你这个地方可以理解为tsourse = sourse;
*
* Vector<Character>tresult=new Vector<Character>(result); 这个地方同理
*
* tresult.add(sourse.elementAt(i)); tresult 集合中放入 sourse 的数据,就是A1-A100,
*
* tsourse.remove(i); tsourse 清除里面所有的数据。 所以这个时候tsourse.size ==0;
*
* new Question1().fullPermutation(tsourse, tresult); 重复调用fullPermutation()
* 方法,
*
* 注意. 这个时候tsourse .size() 是== 0 的; 也就是下面的 sourse = 0; 所以.
* 进入fullPermutation()方法后会执行这个代码 if(sourse.size()==0){ for (int i = 0; i <
* result.size(); i++) { System.out.print(result.elementAt(i)); }
* System.out.print("\n"); count++; return; 运行完毕之后就会return, 不会运行下面的代码。 程序停止
* }
*
* 总结一下: 不要太在意java变量的名字, 弄清楚值的传递,
*/
© 牛耳教育|长沙java培训|长沙java培训学校|长沙软件培 | Powered by LOFTER