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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© www851903307 中级黑马   /  2015-1-31 21:43  /  1218 人查看  /  9 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

* 原始字符串是"abc",打印得到下列所有组合情况:
* "a" "b" "c"
* "ab" "bc" "ca" "ba" "cb" "ac"
* "abc" "acb" "bac" "bca" "cab" "cba"

9 个回复

倒序浏览
这个要怎么弄呀,有点复杂
回复 使用道具 举报
如果原始字符串的字符数就几个还可以用暴力的方法,如果字符数多就不知道了,一起求解吧。
回复 使用道具 举报
思路:先把字符串变成字符数组,遍历数组将每个字符先装进一个List中,比如把a装进个一List,①在a的List中去      找数组abc中不存在的字符,
        发现有a就跳过,发现没有b,创建一个新的List,先把a的List写进去,再把b加进去,就是ab的List,②在ab的List中去找数组abc中不存在的字符,
        发现没有c,就创建一个新的List,把ab的List先写进去,再把c加进去,就是abc的List,然后在abc的List中去找数组abc中不存在的字符。
        遍历abc发现都有了,就返回到了②,发现找完了,就返回到了①,就发现了c,就得到了ac的List,如此往复。
回复 使用道具 举报
天堂雨 发表于 2015-2-1 11:26
思路:先把字符串变成字符数组,遍历数组将每个字符先装进一个List中,比如把a装进个一List,①在a的List中 ...

list还不熟,所以看着有点混乱,体提个问题,不对轻喷。。。如果字符串包含两个以上相同字符呢?比如str=“abcb”?
回复 使用道具 举报
如果还需要排序的话,可以先不打印,都放进TreeSet中排下序,按长度或其他什么要求,这个就不多说了。。。
  1. import java.util.*;
  2. class CharTest
  3. {
  4.        
  5.         //因为要反复遍历abc的字符数组,所以将它声明为静态的全局变量。
  6.     static char[] chars="abc".toCharArray();
  7.     public static void main(String[] args)
  8.         {
  9.         for(int i=0;i<chars.length;i++)
  10.                 {
  11.                         //先遍历出每一个字符存入一个List
  12.                         List<Character> list=new ArrayList<Character>();
  13.                         list.add(chars[i]);
  14.                         find(list);
  15.                 }
  16.         }
  17.     /*使用递归,把每次得到的List传入find方法中,先把当前的List打印出来,再去数组chars中找,
  18.         发现没有包含的字符就把当前的List加上这个字符创建新的List,把新的List继续传进find方法中。
  19.         */
  20.     public static void find(List<Character> list)
  21.         {
  22.                 print(list);
  23.                 for(int i=0;i<chars.length;i++)
  24.                 {
  25.                         if(!list.contains(chars[i]))
  26.                         {
  27.                                 List<Character> temp=new ArrayList<Character>(list);
  28.                                 temp.add(chars[i]);
  29.                                 find(temp);
  30.                         }
  31.                 }
  32.          }
  33.     //打印List
  34.     public static void print(List<Character> list)
  35.         {
  36.         for(Character ch:list)
  37.             System.out.print(ch);
  38.         System.out.println();
  39.         }
  40. }
复制代码


回复 使用道具 举报
本帖最后由 天堂雨 于 2015-2-1 11:38 编辑
奔跑的猴子 发表于 2015-2-1 11:31
list还不熟,所以看着有点混乱,体提个问题,不对轻喷。。。如果字符串包含两个以上相同字符呢?比如str= ...

嗯,我没有考虑到,不过可以将得到的List不打印,以字符串的形式放进一个TreeSet集合中,不仅可以过滤重复的字符串,还能来个从短到长排序:loveliness:
回复 使用道具 举报
天堂雨 发表于 2015-2-1 11:34
嗯,我没有考虑到,不过可以将得到的List不打印,一字符串的形式放进一个TreeSet集合中,不仅可以过滤重复 ...

:lol 半懂半不懂,等我看完集合框架先
回复 使用道具 举报
奔跑的猴子 发表于 2015-2-1 11:38
半懂半不懂,等我看完集合框架先

嗯,奔跑吧,猴子:L
回复 使用道具 举报
这个有点难度啊
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马