package sort;
import java.util.ArrayList;
public class Test38_2 {
public static void main(String[] args) {
Combain("ABC");
}
public static void Combain(String str) {
char[] ch = str.toCharArray();
ArrayList<Character> list = new ArrayList<Character>();
for (int i = 1; i <= ch.length; i++) {
// 表示本次递归去i个字符
Combain(ch, 0, i, list);// 表示本次从0开始去i个
}
}
private static void Combain(char[] ch, int begin, int i,
ArrayList<Character> list) {
// TODO Auto-generated method stub
if (i == 0) {// i为0表示所有字符都成功取出
System.out.println(list);
return;
}
if (begin >= ch.length)// 越界直接返回,匹配失败
return;
// 每次有两种选择,加入或者不加入当前字符
list.add(ch[begin]);// 表示加入当前字符
Combain(ch, begin + 1, i - 1, list);// 在加入当前字符基础上进行下一步
list.remove(list.size() - 1);// 移除加入的字符,避免对递归产生影响
Combain(ch, begin + 1, i, list);// 表示这一步不加入字符,直接进行下一步递归,因此不需要移除添加的字符
}
}