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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

  1. public class Test6 {

  2.         /**
  3.          *  编程列出一个字符串的全字符组合情况,原始字符串中没有重复字符,例如:
  4.          *  原始字符串是"abc",打印得到下列所有组合情况:
  5.          *  "a" "b" "c"
  6.          *  "ab" "bc" "ca" "ba" "cb" "ac"
  7.          *  "abc" "acb" "bac" "bca" "cab" "cba"
  8.          * @param args
  9.          */
  10.         static int k=1;
  11.         static class StopException extends RuntimeException{}
  12.         public static void main(String[] args) {
  13.                 //调用print方法
  14.                 try {
  15.                         print("abc");
  16.                 } catch (StopException e) {
  17.                 }
  18.         }

  19.         //将字符串存储到数组中
  20.         public static void print(String str) {
  21.                 int x = str.length();
  22.                 String[] ch1 = new String[x];
  23.                 String[] ch2 = new String[x];
  24.                 for (int i = 0; i < str.length(); i++) {
  25.                         ch1[i] = str.substring(i, i + 1);
  26.                         ch2[i] = str.substring(i, i + 1);
  27.                 }
  28.                 //输出单个字符
  29.                 for(String string:ch1) {
  30.                         System.out.print(string+" ");
  31.                   }
  32.                
  33.                 myout(ch1, ch2);
  34.         }

  35.         public static void myout(String[] ch1, String[] ch2) {
  36.                 StringBuffer sbf = new StringBuffer();
  37.                 String[] ch3 = null;
  38.                
  39.                 //控制递归的次数
  40.                 k++;
  41.                
  42.                 for (int i = 0; i < ch1.length; i++) {
  43.                         for (int j = 0; j < ch2.length; j++) {
  44.                                 if (!(ch2[j].contains(ch1[i]))) {
  45.                                         String s = ch1[i] + ch2[j];
  46.                                         sbf.append(s+" ");
  47.                                 }
  48.                         }
  49.                 }
  50.                 // 切割字符串
  51.                 String s = sbf.toString();
  52.                 System.out.println();
  53.                 ch3 = s.split(" ");
  54.                 for (String string : ch3) {
  55.                         System.out.print(string+" ");
  56.                 }
  57.                 if (k==ch1.length) {
  58.                        
  59.                         throw new StopException();
  60.                 }
  61.                 //递归
  62.                 myout(ch1, ch3);
  63.         }
  64.        
  65. }
复制代码

4 个回复

倒序浏览
想了好久都没写出来 你好牛啊
回复 使用道具 举报
学习,厉害。
回复 使用道具 举报
大神,牛掰!赞一个!
回复 使用道具 举报
收藏收藏。。。收藏收藏。。。收藏收藏。。。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马