• 编程题:输出字符集合的所有排列组合。


    问题要求:

      给出几个字符,输出字符的所有排列组合。

      如:已知 a b,可得出ab; bc;

                    已知 a b c,可得出abc;  acb; cab; bac; bca; cba;

    实现思路(1):

      递归算法,把集合作为字符串,每次取出一个字符,分别插入已经排列好的组合的空挡(头部,每两个字符间,尾部),形成新组合,再不断循环过程,直到最后一个字符插入时,输出。

      

     1 package combination;
     2 /**
     3  * 
     4  * @author xy.hong
     5  * 输出一个字符串里面所有字符的排列组合
     6  */
     7 
     8 public class Combination {
     9     private StringBuilder myString;     //字符集合作为字符串
    10     private int length;       //字符集合的数量
    11     private int num=0;      //记录排列的序号,用于验证排列的数量是否正确,已知字符数,则排列数量可求。从而验证程序有无错误
    12     
    13     public Combination(StringBuilder s){  //构造函数
    14         myString=s;
    15         length=s.length();
    16     }
    17     
    18     public void printStrings(){              //调用递归函数
    19         comb(0,new StringBuilder(""));
    20     }
    21     
    22     /*
    23      * void comb( 下标, 已经排列好的某个数列)   //方法说明
    24      */
    25     private void comb(int idex,StringBuilder sb){
    26         StringBuilder s =new StringBuilder(sb);
    27         
    28         if(idex==length){          //如果字符已经取完,则可以输出
    29             System.out.print(""+(++num)+":"+s+" ");
    30             return;
    31         }
    32         int l=sb.length();        //已排序好的字符串的长度
    33         for(int i=0; i<=l; i++){          //使用循环分别插入空挡
    34             s.insert(i, myString.charAt(idex));   //插入字符
    35             comb(idex+1, s);           //递归
    36             s.deleteCharAt(i);            //取出插入字符,插入到下个位置
    37                
    38             }
    39     }
    40     
    41     
    42     public static void main(String[] args) {
    43         // TODO Auto-generated method stub
    44         StringBuilder s = new StringBuilder("abc");     //构造要排列的字符
    45         Combination a = new Combination(s);   //构造对象
    46         a.printStrings();              //输出字符
    47     }
    48 
    49 }
    Java,递归

    缺点:运算量大,递归太慢慢慢慢慢慢慢慢慢慢慢慢慢慢慢了。

    撰写时间:2017-08-09 14:51:49

  • 相关阅读:
    全国各地DNS(电信,移动,联通,教育网)
    全国各地电信DNS服务器地址
    免费公共 DNS 大全
    免费公共DNS服务器 全球DNS服务器 国内DNS服务器
    AT指令发送短信
    OpenWrt 定期检测进程是否存在并重启
    OpenWrt 计划任务使用方法
    openwrt-mt7688 修改默认的WIFI SSID
    在MT7628实现wan、wwan与4G动态切换
    Unix常用命令之修改密码
  • 原文地址:https://www.cnblogs.com/xy-hong/p/7325278.html
走看看 - 开发者的网上家园