求n个数的排列

如果给定N个不同字符,将这N个字符全排列,最终的结果将会是N!种。如:给定 A、B、C三个不同的字符,则结果为:ABC、ACB、BAC、BCA、CAB、CBA一共3!=3*2=6种情况。

public class Test6 {

//设置总数
private static int count =0;
public static void main(String[] args) {

//获取
Scanner s = new Scanner(System.in);
int n = s.nextInt();
Vector<Character> sources = new Vector<Character>();
Vector<Character> results = new Vector<Character>();
//将获取的数据放入栈
for (int i = 0; i <n; i++) {
sources.add((char) ('A'+i));
}
//调用自定义方法,计算总数和输出结果
count(sources, results);

//输出符合排列的总数
System.out.println(count);
}
public static void count(Vector<Character> v1,Vector<Character> v2){

//如果v1的长度为0就输出结果因为数据已经全部取出
if(v1.size()==0){
for (int i = 0; i < v2.size(); i++) {
System.out.print(v2.elementAt(i));
}
System.out.print("\n");
count++;
return;
}
for (int i = 0; i < v1.size(); i++) {
//设置两个缓存栈,用于回调函数是作为参数
Vector<Character>tsourse=new Vector<Character>(v1);
Vector<Character>tresult=new Vector<Character>(v2);
//将剩余的数依次添加进矢量中
tresult.add(v1.elementAt(i));

//并移除队列中的当前元素
tsourse.remove(i);

//回调函数
count(tsourse, tresult);
}
}
}

注:主要考察的是递归

如果需要输出的是含重复的数据是可以改为

public static void count(Vector<Character> v1,Vector<Character> v2){
if(v2.size()==v1.size()){
for (int i = 0; i < v2.size(); i++) {
System.out.print(v2.elementAt(i));
}
System.out.print("\n");
count++;
return;
}
 for (int i = 0; i < v1.size(); i++) {
//设置两个缓存栈
Vector<Character>tsourse=new Vector<Character>(v1);
Vector<Character>tresult=new Vector<Character>(v2);
//当
System.out.println(i);
tresult.add(v1.elementAt(i));
//tsourse.remove(i);
count(tsourse, tresult);
}
}

猜你喜欢

转载自www.cnblogs.com/plas/p/9893350.html
今日推荐