已知一个数组中有n个字母,想输出这n个字母的全排列(且要求每输出一种排列就换行),例如:当数组中字母为ABC时,可输出ABC、ACB、BAC、BCA、CAB、CBA六种不同的排列。
算法的大概思想是采用递归的方法实现:定义一个函数,有两个参数,参数1为待处理的字母的数组,参数2为已确定的部分排列;函数功能是依次从参数1中取一个字母加入到参数2后面,并递归调用,若参数1数组为空,则输出参数2。
例如:要求ABC的全排列,则以参数1=数组ABC,参数2=空串来调用该函数;函数执行时,先取出A,以参数1=数组BC,参数2="A"来递归调用,然后取出B,以参数1=数组AC,参数2="B"来递归调用,最后以参数1=数组AB,参数2="C"来递归调用。若参数1=数组BC,参数2="A",则函数执行时,先以参数1=数组C,参数2="AB"来递归调用,再以参数1=数组B,参数2="AC"来递归调用。
请根据上述算法思想,写出函数的详细的伪代码(或完整的程序代码),要求输出ABCDEFG的全排列。
算法的大概思想是采用递归的方法实现:定义一个函数,有两个参数,参数1为待处理的字母的数组,参数2为已确定的部分排列;函数功能是依次从参数1中取一个字母加入到参数2后面,并递归调用,若参数1数组为空,则输出参数2。
例如:要求ABC的全排列,则以参数1=数组ABC,参数2=空串来调用该函数;函数执行时,先取出A,以参数1=数组BC,参数2="A"来递归调用,然后取出B,以参数1=数组AC,参数2="B"来递归调用,最后以参数1=数组AB,参数2="C"来递归调用。若参数1=数组BC,参数2="A",则函数执行时,先以参数1=数组C,参数2="AB"来递归调用,再以参数1=数组B,参数2="AC"来递归调用。
请根据上述算法思想,写出函数的详细的伪代码(或完整的程序代码),要求输出ABCDEFG的全排列。
解决方案 »
- JfreeChart实现甘特图,懂的进
- 什么是service,哎,两个月,没理解清楚 。
- JAVA 做坦克大战(请求指导)
- 一份笔试题,欢迎大家讨论!
- 如何在实例销毁前执行某个方法
- 请问JAVA如何实现登陆WEB网站?给个具体得例子可以好吗?
- 菜鸟提问
- 誰幫我看一下這個正則表達式的意思啊
- 怎么样在dialog上使鼠标变成等待状态?
- 请问,JDK1.3.02中有split()方法吗?
- Exception in thread "main" java.lang.NullPointerException at A.main(A.java:8)
- <a href='www.baidu.com'>sdfsdf</a>
import java.io.IOException;
import java.io.InputStreamReader;public class Permutation { private static int number = 0;
public Permutation(){
init();
}
public void permutation(int[] perm, int index){
if(index ==(number - 1)){
for(int i = 0; i < number; i++){
System.out.print(perm[i]);
}
System.out.println();
}else{
for(int j = index; j < number; j++){
swap(perm,index,j); //交换这两个数
permutation(perm,index+1);
swap(perm,index,j); //换回这两个数, 然后增加步长
}
}
}
public void swap(int[] perm, int first, int second){
int temp = perm[first];
perm[first] = perm[second];
perm[second] = temp;
}
public static void main(String[] args){
Permutation p = new Permutation();
int[] perm = new int[number];
for(int i = 0; i < number; i++){
perm[i] = i + 1;
}
p.permutation(perm,0);
}
private void init(){
while(true){
System.out.println("请输入一个小于9 的整数");
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String line = null;
try {
line = br.readLine();
} catch (IOException e) {
e.printStackTrace();
}
number = Integer.parseInt(line);
if(number >= 9){
System.out.println("输入的整数必须小于9");
}else{
break;
}
}
}
}
permutation(int[] perm, int index){
if(index ==(number - 1)){
Print
}else{
for(int j = index; j < number; j++){
swap(perm,index,j); //交换这两个数
permutation(perm,index+1);
swap(perm,index,j); //换回这两个数, 然后增加步长
}
}
}