A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 飘雪恩情 初级黑马   /  2014-2-21 20:29  /  1133 人查看  /  1 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

编程列出一个字符串的全字符组合情况,原始字符串中没有重复字符        例如:
        原始字符串是"abc",打印得到下列所有组合情况
"a" "b" "c"
        "ab" "bc" "ca" "ba" "cb" "ac"
        "abc" "acb" "bac" "bca" "cab" "cba"
这都题怎么做啊? 想了好久都没一点头绪,帮帮忙啊

评分

参与人数 1技术分 +1 收起 理由
何伟超 + 1

查看全部评分

1 个回复

倒序浏览
本帖最后由 李金中 于 2014-2-21 21:31 编辑

额   我做过。。。

本人想法:递归肯定的。当n = 1时, 找出所有单个字母组成的字符串,存为cArr[n];当n = m 时,可以将cArr[n]遍历插入当n = m - 1 时的字符串数组的每一个元素后,即得。比如 n = 2时, 可以将 a, b, c分别插入n = 1时的字符串数组元素(且该元素不包括带插入的元素)"a", "b", "c"后,得 "ba" "ca" "ab" "cb" "ac""bc"
同理可得 n = 3时的字符串数组。 程序如下:

public class Test6 {
         public static void main(String[] args)
         {
                 ArrayList<StringBuilder> strDes = new ArrayList<StringBuilder>();
                 String strSource = "abc";
                 int length = 3;
                 new Test6().printAll(strSource, length);
         }
         
        public  ArrayList<StringBuilder>  printAll(String strSource, int length)
         {
                 char[] cArr = strSource.toCharArray();
                 int lengthSource = strSource.length();
                 ArrayList<StringBuilder> strTemp = new ArrayList<StringBuilder>();
                 ArrayList<StringBuilder> strDes = new ArrayList<StringBuilder>();
                 
                if(length == 1)
                 {
                         for(int indexDes = 0; indexDes < lengthSource; indexDes++)
                         {
                                 strTemp.add(new StringBuilder().append( cArr[indexDes] + ""));
                         }
                 }
                 else
                {
                         length--;
                         strDes = printAll(strSource, length);
                         for(int index = 0; index < lengthSource; index++)
                         {
                                 for(int indexDes = 0; indexDes < strDes.size(); indexDes++)
                                 {
                                         if((strDes.get(indexDes).indexOf(cArr[index] + "")) == -1)
                                         {        
                                                StringBuilder strBuilderTemp = new StringBuilder(strDes.get(indexDes));
                                                 strBuilderTemp.append(cArr[index] + "");
                                                 strTemp.add(strBuilderTemp);
                                         }
                                 }
                         }
                 }
                 
                for(int indexTemp = 0; indexTemp < strTemp.size(); indexTemp++)
                 {
                         System.out.print("\"" + strTemp.get(indexTemp).toString() + "\"");
                 }
                 System.out.println();
                 
                return strTemp;
         }
}

我重装系统了。。之前提交的 加完整注释的代码不见了。。。就剩这个了。。看不懂再跟你解释。。。看懂就算了

评分

参与人数 1技术分 +1 收起 理由
何伟超 + 1

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马