java输入几个数,有多少种排序方法

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