经典递归问题:全排列问题

作者: 就良同学 | 来源:发表于2019-02-15 16:35 被阅读1次
image

题目设计一个递归算法生成n个元素{r1,r2,…,rn}的全排列。


【算法讲解】:

设R={r1,r2,…,rn}是要进行排列的n个元素,Ri=R-{ri}。
集合X中元素的全排列记为perm(X)。
(ri)perm(X)表示在全排列perm(X)的每一个排列前加上前缀得到的排列。
R的全排列可归纳定义如下:
当n=1时,perm(R)=(r),其中r是集合R中唯一的元素;
当n>1时,perm(R)由(r1)perm(R1),(r2)perm(R2),…,(rn)perm(Rn)构成。

<font color="blue" face="方正宋黑简体">实现思想:将整组数中的所有的数分别与第一个数交换,这样就总是在处理后n-1个数的全排列。</font>


示例

当n=3,并且E={a,b,c},则:
perm(E)=a.perm({b,c}) + b.perm({a,c}) + c.perm({a,b})
perm({b,c})=b.perm(c) + c.perm(b)
a.perm({b,c})=a.b.perm(c) + a.c.perm(b)
​ =a.b.c + a.c.b=(abc, acb)

我的代码:

public class Main {
    public static void main(String[] args){
        char[] data="ABC".toCharArray();
        f(data,0);
    }
    private static void f(char[] data,int k) {
        if(k==data.length){//只剩下一个元素
            for(int i=0;i<data.length;i++){
                System.out.print(data[i]+" ");
            }
            System.out.println();
        }
        for(int i=k;i<data.length;i++){
            {char c=data[k];data[k]=data[i];data[i]=c;}//试探
            f(data,k+1);
            {char c=data[k];data[k]=data[i];data[i]=c;}//回溯
        }
    }
}

关于回溯:

3个电灯串联在一起,其中有个灯泡坏了,通过在灯泡正负极接上一根导线的方法来筛选出坏了的灯泡,每次检测下一灯泡时,必须先将连在上一灯泡的导线取下,保持在最初状态,这就是回溯。

image

相关文章

  • 经典递归问题:全排列问题

    【题目】设计一个递归算法生成n个元素{r1,r2,…,rn}的全排列。 【算法讲解】: 设R={r1,r2,…,r...

  • 递归--全排列问题

    前置文章:递归算法:www.jianshu.com/p/703069f3ba3f . 递归问题有两个经典的...

  • 关于全排列递归问题

    今天在看一个朋友做笔试,其中有一道题,假设有abcd字母,求其全排列有多少种。 一看到这个我俩第一反应:我们做过,...

  • 全排列与字典序

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

  • 递归处理数字全排列算法

    问题背景### 递归很常用,但确实不好理解,下边这段程序是用来进行数字全排列的由于很多算法需要讲数字全排列后再来暴...

  • 几种计算全排列的方法

    基于golang实现,有非并发实现和并发实现 递归 全排列问题,比如打印1-9的共9个字母的全排列。先输出1,然后...

  • 全排列,组合(字符串或数字)字典序

    无重复字符的全排列和组合数目问题(求这类问题一般用递归,把问题分解成1+n-1,对n-1部分继续递归分解) 组合:...

  • Leetcode.46.Permutations

    题目 给定一个没有重复数字的数字序列, 输出这写数字的全排列组合. 思路 这种全排列的问题最直接的思路就是递归. ...

  • 全排列问题

    中午看到的一个题目。求一个不重复字符串的全排列。 主要有递归,字典序等解决方案。然后想到stl里的next_per...

  • 全排列问题

    题目:给定一个 没有重复 数字的序列,返回其所有可能的全排列。 示例:输入: [1,2,3] 输出:[ [1,2,...

网友评论

    本文标题:经典递归问题:全排列问题

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