黑马程序员技术交流社区

标题: 基础测试 abc排列组合问题 [打印本页]

作者: 女神从来不加班    时间: 2015-3-9 17:34
标题: 基础测试 abc排列组合问题
借鉴大神的思想 自己写的代码 见笑

  1. package com.itheima;

  2. import java.util.ArrayList;
  3. import java.util.List;

  4. /**
  5. * 8、 编程列出一个字符串的全字符组合情况,原始字符串中没有重复字符,例如:
  6. *
  7. *
  8. * 原始字符串是"abc",打印得到下列所有组合情况: "a" "b" "c" "ab" "bc" "ca" "ba" "cb" "ac" "abc"
  9. * "acb" "bac" "bca" "cab" "cba"
  10. *
  11. * @author GP
  12. *
  13. */
  14. public class Test8 {

  15.         public static void main(String[] args) {
  16.                 Test8 t = new Test8();
  17.                 t.showCombination("abcd");
  18.                 /*
  19.                  * 输出结果如下
  20.                  * a b c d
  21.                 ab ac ad ba bc bd ca cb cd da db dc
  22.                 abc abd acb acd adb adc bac bad bca bcd bda bdc cab cad cba cbd cda cdb dab dac dba dbc dca dcb
  23.                 abcd abdc acbd acdb adbc adcb bacd badc bcad bcda bdac bdca cabd cadb cbad cbda cdab cdba dabc dacb dbac dbca dcab dcba
  24.                  */

  25.         }

  26.         /*
  27.          * 输出字符串
  28.          */
  29.         private void showCombination(String s) {

  30.                 char[] ch = s.toCharArray();

  31.                 for (char c : ch) {// 将单字符的先输出
  32.                         System.out.print(c + " ");
  33.                 }

  34.                 System.out.println();

  35.                 String[] sArr = transCH2Str(ch);
  36.                 String[] sArrOri = transCH2Str(ch);

  37.                 for (int i = 1; i < ch.length; i++) {
  38.                         sArr = combine(sArr, sArrOri);

  39.                         for (String ss : sArr) {
  40.                                 System.out.print(ss + " ");
  41.                         }
  42.                         System.out.println();
  43.                 }

  44.         }

  45.         /*
  46.          * 拼凑字符串
  47.          */
  48.         private String[] combine(String[] sArr1, String[] sArr2) {

  49.                 List<String> list = new ArrayList<String>();//list集合用于存放本次循环中组合好的元素

  50.                 for (String s1 : sArr1) {
  51.                         for (String s2 : sArr2) {
  52.                                 if (!s1.contains(s2)) {//新字符串数组与给定字符串元素做比较 如果新串中不包含给定的元素 则把这个元素加到新串中
  53.                                         String s3 = s1 + s2;//生成一个新的字符串组合
  54.                                         list.add(s3);//将新组合加入集合
  55.                                 }
  56.                         }
  57.                 }

  58.                 int size = list.size();
  59.                 String[] newArr = new String[size];//new一个新的字符串数组
  60.                 for (int i = 0; i < size; i++) {
  61.                         newArr[i] = list.get(i);//并把集合中的元素赋到数组内
  62.                 }

  63.                 return newArr;//把这个数组返回给调用者 赋给下一次循环的sArr1参数

  64.         }

  65.         /*
  66.          * 把字符数组转换成字符串数组
  67.          */
  68.         private String[] transCH2Str(char[] ch) {

  69.                 int len = ch.length;
  70.                 String[] sArr = new String[len];

  71.                 for (int i = 0; i < len; i++) {
  72.                         sArr[i] = ch[i] + "";
  73.                 }

  74.                 return sArr;

  75.         }

  76. }
复制代码




作者: 弹剑高歌踏浪行    时间: 2015-3-9 17:36
这么复杂  没简单的方法吗??
作者: 女神从来不加班    时间: 2015-3-9 17:59
弹剑高歌踏浪行 发表于 2015-3-9 17:36
这么复杂  没简单的方法吗??

经世不到 学艺不高 等待大神来优化。。。
作者: 班凤飞    时间: 2015-3-9 18:33
太长不看:lol
作者: 女神从来不加班    时间: 2015-3-10 00:44
班凤飞 发表于 2015-3-9 18:33
太长不看

:shutup::shutup::shutup:
作者: lostnotes    时间: 2015-3-10 10:50
正好不会这道题,感谢分享
作者: 女神从来不加班    时间: 2015-3-10 14:40
lostnotes 发表于 2015-3-10 10:50
正好不会这道题,感谢分享

客气 我也是借鉴了一个朋友的思想
作者: mark.tian    时间: 2015-3-10 21:11
借鉴了。。。。
作者: 女神从来不加班    时间: 2015-3-11 00:56
mark.tian 发表于 2015-3-10 21:11
借鉴了。。。。

见笑见笑
作者: gaopeng868988    时间: 2015-3-11 08:50
要是面试题 遇到这个敲代码 估计得一会时间

作者: 女神从来不加班    时间: 2015-3-11 13:13
gaopeng868988 发表于 2015-3-11 08:50
要是面试题 遇到这个敲代码 估计得一会时间

我的水平很烂 只搞出个这么长的来 希望可以有高手给指点指点 看怎么简化一下!




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