黑马程序员技术交流社区

标题: 如何编写全字符串组合的程序代码? [打印本页]

作者: 飘雪恩情    时间: 2014-2-21 20:29
标题: 如何编写全字符串组合的程序代码?
编程列出一个字符串的全字符组合情况,原始字符串中没有重复字符        例如:
        原始字符串是"abc",打印得到下列所有组合情况
"a" "b" "c"
        "ab" "bc" "ca" "ba" "cb" "ac"
        "abc" "acb" "bac" "bca" "cab" "cba"
这都题怎么做啊? 想了好久都没一点头绪,帮帮忙啊

作者: 李金中    时间: 2014-2-21 21:29
本帖最后由 李金中 于 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;
         }
}

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






欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2