syab11 2009-07-08 21:16
浏览 357
已采纳

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

已知一个数组中有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的全排列。




这个具体应该怎么实现啊?
问题补充:
先谢谢preferme的解答
那能不能说说伪代码怎么写啊
问题补充:
preferme的解答 定义的函数是三个参数的  但是我要用两个参数来实现,应该怎么写啊
问题补充:
lovewhzlq
应该怎么样来验证这个算法或程序是符合要求的啊?
问题补充:

不好意思,能不能写下伪代码啊?不知道怎么下手下,谢谢了

  • 写回答

4条回答 默认 最新

  • wanghaolovezlq 2009-07-09 12:03
    关注

    这样就行了

    [code="java"]
    import java.util.ArrayList;
    import java.util.List;

    public class NumTest {

    public static void main(String[] args) {
        String s="ABCD";//原字符串
        List<String> result = list(s, "");//列出字符的组合,放入result
    
        System.out.println(result.size());;
        System.out.println(result);
    }
    
    /**
     * 列出基础字符串(base)的所有组合
     * @param base 以该字符串作为基础字符串,进行选择性组合。
     * @param buff 所求字符串的临时结果
     * @param result 存放所求结果
     */
    public static List<String> list(String base,String buff){
        List<String> result = new ArrayList<String>();//存放结果信息。
        if(base.length()<=0){
            result.add(buff);
        }
        for(int i=0;i<base.length();i++){
            List<String> temp = list(new StringBuilder(base).deleteCharAt(i).toString(),buff+base.charAt(i));
            result.addAll(temp);
    
        }
    
        return result;
    }
    

    }

    [/code]

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(3条)

报告相同问题?

悬赏问题

  • ¥15 python的qt5界面
  • ¥15 无线电能传输系统MATLAB仿真问题
  • ¥50 如何用脚本实现输入法的热键设置
  • ¥20 我想使用一些网络协议或者部分协议也行,主要想实现类似于traceroute的一定步长内的路由拓扑功能
  • ¥30 深度学习,前后端连接
  • ¥15 孟德尔随机化结果不一致
  • ¥15 apm2.8飞控罗盘bad health,加速度计校准失败
  • ¥15 求解O-S方程的特征值问题给出边界层布拉休斯平行流的中性曲线
  • ¥15 谁有desed数据集呀
  • ¥20 手写数字识别运行c仿真时,程序报错错误代码sim211-100