zoukankan      html  css  js  c++  java
  • 算法基础_递归_全排列问题

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

    解题思路如下:

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

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

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

    希望对大家有所帮助

    以上

  • 相关阅读:
    ci上传图片
    Mac下使用svn命令
    linux 下svn忽略文件
    thinkphp5 隐藏入口和支持pathinfo
    ci tp重定向
    php命名空间
    thinkphp5学习记录一
    Mac下安装homebrew
    使用iTerm2快捷连接SSH
    摄影基础
  • 原文地址:https://www.cnblogs.com/lavender-pansy/p/10519328.html
Copyright © 2011-2022 走看看