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);
        }
    }

    解题思路如下:

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

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

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

    希望对大家有所帮助

    以上

  • 相关阅读:
    Bit Manipulation
    218. The Skyline Problem
    Template : Two Pointers & Hash -> String process
    239. Sliding Window Maximum
    159. Longest Substring with At Most Two Distinct Characters
    3. Longest Substring Without Repeating Characters
    137. Single Number II
    142. Linked List Cycle II
    41. First Missing Positive
    260. Single Number III
  • 原文地址:https://www.cnblogs.com/lavender-pansy/p/10519328.html
Copyright © 2011-2022 走看看