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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 女神从来不加班 中级黑马   /  2015-3-9 17:34  /  1656 人查看  /  10 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

借鉴大神的思想 自己写的代码 见笑

  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. }
复制代码



评分

参与人数 2技术分 +2 收起 理由
艺多不压身丶 + 1 赞一个!
万合天宜 + 1

查看全部评分

10 个回复

倒序浏览
这么复杂  没简单的方法吗??
回复 使用道具 举报
弹剑高歌踏浪行 发表于 2015-3-9 17:36
这么复杂  没简单的方法吗??

经世不到 学艺不高 等待大神来优化。。。
回复 使用道具 举报
太长不看:lol
回复 使用道具 举报

:shutup::shutup::shutup:
回复 使用道具 举报
正好不会这道题,感谢分享
回复 使用道具 举报
lostnotes 发表于 2015-3-10 10:50
正好不会这道题,感谢分享

客气 我也是借鉴了一个朋友的思想
回复 使用道具 举报
借鉴了。。。。
回复 使用道具 举报

见笑见笑
回复 使用道具 举报
要是面试题 遇到这个敲代码 估计得一会时间
回复 使用道具 举报
gaopeng868988 发表于 2015-3-11 08:50
要是面试题 遇到这个敲代码 估计得一会时间

我的水平很烂 只搞出个这么长的来 希望可以有高手给指点指点 看怎么简化一下!
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马