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, 不会运行下面的代码。 程序停止 * } * * 总结一下: 不要太在意变量的名字, 弄清楚值的传递, */