美文网首页
递归 实现数组全排列

递归 实现数组全排列

作者: hongXkeX | 来源:发表于2017-07-25 21:18 被阅读291次

题目:给定一个字符数组:

char[] p = {'a','b','c'};

要求打印出由a b c组成的全排列(即3!= 6个)

** 写在代码前: **
想法是利用递归解决,参考:
数组全排列---递归方法实现(java)
思路是:
a b c 的全排列 =
a + (b 和 c 的全排列——即 bc 和 cd) +
b + (a 和 c 的全排列——即 ac 和 ca) +
c + (a 和 b 的全排列——即 ab 和 ba)

** 给出Java代码: **

public class Permutation{ 
    public static void permute(char[] a, int i){  
        if(a==null || i<0 || i>a.length){  
            return;  
        }  
        if(i==a.length){  
            System.out.println(new String(a));  
        }else{  
            for(int j=i; j<a.length; j++){  
                swap(a, i, j);       //交换前缀,使之产生下一个前缀
                permute(a,i+1);  
                swap(a, i, j);       //将前缀换回来,继续做上一个的前缀排列
            }  
        }  
    }
    
    private static void swap(char[] a, int s, int i){  
        char t = a[s];  
        a[s] = a[i];  
        a[i] = t;  
    }
     
    public static void main(String args[]){  
        char[] p = {'a','b','c'};  
        permute(p, 0);  
    }  
}

输出:


输出结果.png

** 来看重点代码:**

if(i==a.length){  
    System.out.println(new String(a));  
}else{  
    for(int j=i; j<a.length; j++){  
        swap(a, i, j);       //交换前缀,使之产生下一个前缀
        permute(a,i+1);  
        swap(a, i, j);       //将前缀换回来,继续做上一个的前缀排列
    }  
}

当 i > 3时返回 当i = 3时打印
当 i < 3时循环交换 p[i] 和 p[j](j从i走到2)

相关文章

  • 递归 实现数组全排列

    题目:给定一个字符数组: 要求打印出由a b c组成的全排列(即3!= 6个) ** 写在代码前: **想法是利用...

  • 全排列与字典序

    全排列 递归实现全排列; 首先来说递归算法实现全排列: 例如,对于{1,2,3,4}的例子进行全排列,其可以分解...

  • 全排列与全组合

    递归+交换值实现全排列 非重复的全排列 位运算实现全组和

  • 递归实现js数组全排列

    规律 当n = 1时, 数组arr = [A],全排列结果为 [A]; 当n = 2时, 数组arr = [A, ...

  • 递归——数组全排列

    方法一 深度 方法二 字典序递归

  • ARTS w03- 求一个数组的全排列组合

    Algorithm 求一个数组的全排列组合。例子: 代码: 这是递归的实现。先交换最后的两个元素,然后不断向前递归...

  • 46. Permutations

    算法 1: 递归数组 的全排列,等价于全排列与可能的取值组合得到。 算法 2: 计算一个排列 按字典升序排列的紧...

  • P254-字符串的排列

    排列总结: 字符串的全排列和组合算法 1.递归实现 2.非递归实现 qsort函数、sort函数 (精心整理篇) ...

  • 46+47、Permutations、Permutations2

    数组全排列 Permutation Example 思路递归的方法,设置一个used数组,用来记录相应位置是否已经...

  • 数组全排列

    递归实现 库函数实现 获取所有元素的全排列:itertools.permutation(lst, n) ——n:...

网友评论

      本文标题:递归 实现数组全排列

      本文链接:https://www.haomeiwen.com/subject/nxtwkxtx.html