已知一个数组中有n个字母,想输出这n个字母的全排列

syab1108 2009-07-09 10:13:54
已知一个数组中有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的全排列。
...全文
386 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
kiyend 2009-07-09
  • 打赏
  • 举报
回复
可以参考下 《java数据结构和算法》第二版的 递归一章, 里面有详细讲到
@井九 2009-07-09
  • 打赏
  • 举报
回复
代码不规范一点就是伪码了呗
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); //换回这两个数, 然后增加步长
}
}

}
bigbug9002 2009-07-09
  • 打赏
  • 举报
回复
http://topic.csdn.net/u/20090625/17/37ab46e6-099b-4044-912f-de862dda2e72.html

看看这个贴,应该对你有所帮助
syab1108 2009-07-09
  • 打赏
  • 举报
回复
这个算法的伪代码应该怎么写啊?
linuxlsx 2009-07-09
  • 打赏
  • 举报
回复
这里由一个求全排列的代码 lz试一下咯

import java.io.BufferedReader;
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;
}
}

}
}

62,621

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧