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


    问题:给定一个字符串,如“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);
        }
    }

    解题思路如下:

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

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

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

    希望对大家有所帮助

    以上

  • 相关阅读:
    luogu1210 回文检测
    luogu2420 让我们异或吧
    luogu4151 最大XOR和路径
    线性基
    博弈论(扯淡)
    矩阵求逆 模板
    luogu2513 逆序对数列
    洛谷4316 绿豆蛙的归宿(DAG递推/概率dp)
    1898: [Zjoi2005]Swamp 沼泽鳄鱼
    矩阵
  • 原文地址:https://www.cnblogs.com/lavender-pansy/p/10519328.html
Copyright © 2020-2023  润新知