38_2 字符串的组合

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);// 表示这一步不加入字符,直接进行下一步递归,因此不需要移除添加的字符

    }
}
 

发布了41 篇原创文章 · 获赞 1 · 访问量 754

猜你喜欢

转载自blog.csdn.net/coder_my_lover/article/details/105305363