算法基础_递归_全排列问题

问题:给定一个字符串,如“ABCDE”,然后对其进行全排列,将结果全部输出,使用递归

 

/**
 *     使用递归完成一个字符串的全排列
 * @author Administrator
 *
 */
public class Demo02 {
    static int count = 0;
    public static void f(char[] ini,int k/*从第几个位置开始选*/) {
        //count++;
        if(k == ini.length) {
            for(char temp:ini) {
                System.out.print(temp);
            }
            System.out.println();
        }
        
        for(int i = k;i<ini.length;i++) {
            {char m = ini[k];ini[k] = ini[i];ini[i] = m;}//转换
            f(ini,k+1);
            {char m = ini[k];ini[k] = ini[i];ini[i] = m;}//回溯
        }
    }
    
    public static void main(String[] args) {
        char[] s = "ABC".toCharArray();
        f(s,0);
    //    System.out.println(count);
    }
}

 

解题思路如下:

就是使用递归和循环嵌套,然后在字符串上的每一个位置进行五次变动,当然,如此设计的巧妙之处就在于每次都是在前面不变的情况下,一位一位的选中,比较切合全排列的思想(好吧我语文不好,不知道怎么表达……)

和五层循环嵌套的思想差不多,不过在代码上看起来比较简洁(相应的……理解上千差万别)

简单来说,就是,不用想那么多,就是每次吧第一位选中,然后再进行下一位的遍历

 

希望对大家有所帮助

以上

posted @ 2019-03-12 20:12  醉生梦死_0423  阅读(140)  评论(0编辑  收藏  举报