字符串的全排列和组合

字符串的全排列

/**
 * @ClassName TestDemo37
 * @Description 面38 全排列
 * @Author lzq
 * @Date 2019/1/5 20:54
 * @Version 1.0
 **/
public class TestDemo37 {
    public static int count = 0;  //记录排列的种树

    /**
     * 交换位置
     * @param chars
     * @param i
     * @param j
     */
    public static void swap(char[] chars,int i,int j){
        char temp = chars[i];
        chars[i] = chars[j];
        chars[j] = temp;
    }

    /**
     * 全排列主方法
     * @param chars
     * @param k
     */
    public static void allPermutate(char[] chars,int k){
        if(k == chars.length-1){
            print(chars);
            count++;
        }else{
            for(int i = k;i < chars.length;i++){
                swap(chars,k,i);
                allPermutate(chars, k+1);
                swap(chars,k,i);
            }
        }
    }

    //打印
    public static void print(char[] chars) {
        for(int i = 0;i < chars.length;i++){
            System.out.print(chars[i]+"\t");
        }
        System.out.println();
    }

    //起始方法
    public static void Permutate(String str) {
        if(str == null || str.length() == 0) {
            return;
        }
        allPermutate(str.toCharArray(),0);
    }

   public static void main(String[] args) {
        String str = "ABC";
        Permutate(str);
        System.out.println(count);
    }
}

运行结果:

A	B	C	
A	C	B	
B	A	C	
B	C	A	
C	B	A	
C	A	B	
6

字符串的组合

/**
 * @ClassName TestDemo38
 * @Description 组合
 * @Author lzq
 * @Date 2019/1/6 1:34
 * @Version 1.0
 **/
public class TestDemo38 {
    public static void main(String[] args) {
        String str = "ABC";
        combination(str);
    }

    /**
     * 求字符串组合的主方法
     * @param s
     */
    public static void combination(String s) {
        char[] chars = s.toCharArray();
        StringBuffer str = new StringBuffer();
        for(int i = 1;i <= chars.length;i++) {
            core(chars,0,i,str);
        }

    }

    /**
     * 求字符串组合的核心方法
     * @param chars
     * @param begin
     * @param len
     * @param str
     */
    private static void core(char[] chars,int begin,int len, StringBuffer str) {
        if(len == 0) {                //当都选择结束时打印sb内容
            System.out.println(str+" ");
            return;
        }

        if(begin == chars.length) {
            return;
        }

        str.append(chars[begin]);   				//选取
        core(chars,begin+1,len-1,str);   	//剩下的里面选len-1个
        str.deleteCharAt(str.length()-1); 	//删除
        core(chars,begin+1,len,str);   	//剩下的里面选len个

    }

}

运行结果:

A 
B 
C 
AB 
AC 
BC 
ABC 

猜你喜欢

转载自blog.csdn.net/QQ2899349953/article/details/85892220