//编程输出一个字符串的全字符组合情况,原始字符串中没有重复字符,
/*例如:
原始字符串是"abc",打印得到下列所有组合情况
"a" "b" "c"
"ab" "bc" "ca" "ba" "cb" "ac"
"abc" "acb" "bac" "bca" "cab" "cba"*/ //[abc, acb, bac, bca, cab, cba]
/**
* 分析:将abc转换成为字符数组;
* 2,让数组中的每一个元素进行组合
* 3,可以使用for嵌套循环试一下
*
*
* */
import java.util.ArrayList;
import java.util.List;
public class Test11 {
public static void main(String[] args) {
// TODO Auto-generated method stub
String s = "abc";
char[] ch = s.toCharArray();
for (int i = 0; i < ch.length; i++) {
System.out.print(String.valueOf(ch[i]) + " ");
}
System.out.println();
ArrayList<String> list = new ArrayList<>();
for (int i = 0; i < ch.length; i++) {
// list.add(String.valueOf(ch[i])); //将abc添加到集合当中
for (int j = 0; j < ch.length; j++) {
// 将两个字符直接输出
if (!String.valueOf(ch[i]).equals(String.valueOf(ch[j]))) {
System.out.print(String.valueOf(ch[i]) + String.valueOf(ch[j]) + " ");
// 将三个字符存入
for (int k = 0; k < ch.length; k++) {
list.add(String.valueOf(ch[i]) + String.valueOf(ch[j]) + String.valueOf(ch[k]));
}
}
}
//
}
// 判断list中的每一个元素,看有没有重复的
System.out.println();
// System.out.println(list.size());
// 将集合中的元素存入字符数组中
String[] st = new String[list.size()];
for (int i = 0; i < list.size(); i++) {
st[i] = list.get(i);
}
// 遍历String[]数组
/*
* for (int i = 0; i < st.length; i++) { System.out.print(st[i]+" "); }
*/
// 判断字符数组中的每一个元素是否有重复字符,如果有没有重复就添加到新集合中
List<String> newlist = new ArrayList<>();
for (int k = 0; k < st.length; k++) {
// 判断条件,第一个字符不等于第二个字符并且第一个字符不等第3个字符并且第二个字符不等于第3个字符
if ((st[k].charAt(0) != st[k].charAt(1) && st[k].charAt(0) != st[k].charAt(2))
&& st[k].charAt(1) != st[k].charAt(2)) {
newlist.add(st[k]);
}
}
// 遍历新集合
for (int i = 0; i < newlist.size(); i++) {
System.out.print(newlist.get(i) + " ");
}
}
}
|
|