本帖最后由 Aaron_wang 于 2015-11-25 10:57 编辑
看到不少人在问这种题目,在此贴出自己的做法,以供参考讨论!
不管字符串有多少字符,都适用。- import java.util.ArrayList;
- public class TestNew8 {
- /**
- * 编程列出一个字符串的全字符组合情况,原始字符串中没有重复字符,例如: 原始字符串是"abc",打印得到下列所有组合情况: "a"
- * "b" "c" "ab" "bc" "ca" "ba" "cb" "ac" "abc" "acb" "bac" "bca" "cab" "cba"
- * 思路:先排处a b c-->ab ac ba bc ca cb(判断去除重复元素)--->(再添加abc,并去除重复元素)
- *
- * @author Aaron
- */
- public static void main(String[] args) {
- //long start = System.currentTimeMillis();
- String str = "abcde";
- select(str);
- //long end = System.currentTimeMillis();
- //System.out.println("共用时"+(end-start)+"ms");
- }
- private static void select(String str) {
- ArrayList<String> al = new ArrayList<>();
- char[] strs = str.toCharArray();
- // 装进ArrayList集合
- for (int i = 0; i < strs.length; i++) {
- al.add(strs[i] + "");
- }
- int start = 0;//指向要迭代元素的索引
- int newAddAll = al.size();//每次要迭代的元素个数,也就是新增元素个数
- int newAdd = 0;//集合每添加一个元素就自增一次
- for (int i = 1; i < str.length(); i++) {// i控制字符的个数,1代表有两个字符
- for (int j = 0; j < newAddAll; start++, j++) {
- for (int k = 0; k < str.length(); k++) {
- String s1 = al.get(start);
- String s2 = al.get(k);
- if (!s1.contains(s2)) {//判断是否元素重复
- al.add(s1+s2);
- newAdd++;
- }
- }
- }
- newAddAll = newAdd;
- newAdd = 0;
- }
- System.out.println(al);
- }
- }
复制代码
|
|