黑马程序员技术交流社区
标题:
此题终结:编程列出一个字符串的全字符组合情况abcde...
[打印本页]
作者:
Aaron_wang
时间:
2015-11-25 10:50
标题:
此题终结:编程列出一个字符串的全字符组合情况abcde...
本帖最后由 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);
}
}
复制代码
作者:
Aaron_wang
时间:
2015-11-25 10:59
自己先顶下
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2