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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 Aaron_wang 于 2015-11-25 10:57 编辑

看到不少人在问这种题目,在此贴出自己的做法,以供参考讨论!
不管字符串有多少字符,都适用。
  1. import java.util.ArrayList;

  2. public class TestNew8 {

  3.         /**
  4.          * 编程列出一个字符串的全字符组合情况,原始字符串中没有重复字符,例如: 原始字符串是"abc",打印得到下列所有组合情况: "a"
  5.          * "b" "c" "ab" "bc" "ca" "ba" "cb" "ac" "abc" "acb" "bac" "bca" "cab" "cba"
  6.          * 思路:先排处a b c-->ab ac ba bc ca cb(判断去除重复元素)--->(再添加abc,并去除重复元素)
  7.          *
  8.          * @author Aaron
  9.          */
  10.         public static void main(String[] args) {
  11.                 //long start = System.currentTimeMillis();
  12.                 String str = "abcde";
  13.                 select(str);
  14.                 //long end = System.currentTimeMillis();
  15.                 //System.out.println("共用时"+(end-start)+"ms");
  16.         }

  17.         private static void select(String str) {
  18.                 ArrayList<String> al = new ArrayList<>();
  19.                 char[] strs = str.toCharArray();
  20.                 // 装进ArrayList集合
  21.                 for (int i = 0; i < strs.length; i++) {
  22.                         al.add(strs[i] + "");
  23.                 }
  24.                 int start = 0;//指向要迭代元素的索引
  25.                 int newAddAll = al.size();//每次要迭代的元素个数,也就是新增元素个数
  26.                 int newAdd = 0;//集合每添加一个元素就自增一次
  27.                 for (int i = 1; i < str.length(); i++) {// i控制字符的个数,1代表有两个字符
  28.                         for (int j = 0; j < newAddAll; start++, j++) {
  29.                                 for (int k = 0; k < str.length(); k++) {
  30.                                         String s1 = al.get(start);
  31.                                         String s2 = al.get(k);
  32.                                         if (!s1.contains(s2)) {//判断是否元素重复
  33.                                                 al.add(s1+s2);
  34.                                                 newAdd++;
  35.                                         }
  36.                                 }
  37.                         }
  38.                         newAddAll = newAdd;
  39.                         newAdd = 0;
  40.                 }
  41.                 System.out.println(al);
  42.         }

  43. }
复制代码





1 个回复

倒序浏览
自己先顶下
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马