递归实现全排列python

python递归实现"abcd"字符串全排列

1.保持a不动,动bcd
2.保持b不动,动cd
3.保持c不动,动d

def pailie(head="",string=""):
    if len(string)>1:
        for father_string in string:
            pailie(head+father_string,string.replace(father_string,"")) #关键一点:将头和尾全部传下去
    else:
        print(head+string)

pailie(string="abcd")

python递归实现"abad"字符串全排列

与上一个两个不同,一是,第一个a排完顺序后,下一个a不能再排,二是替换的时候不能把重复的也替换掉

def pailie(head="",string=""):
    if len(string)>1:
        for num,father_string in enumerate(string):
            if father_string in string[0:num]:#如果字符与前面的重复说明拍过顺序了
                continue
            pailie(head+father_string,string.replace(father_string,"",1))#只能替换一次
    else:
        print(head+string)

pailie(string="abca")

原文地址:https://www.cnblogs.com/double-t/p/11143256.html

时间: 2024-11-08 07:48:13

递归实现全排列python的相关文章

Java使用递归实现全排列的代码

将写内容过程经常用到的一些内容备份一下,下边内容是关于Java使用递归实现全排列的内容. public class AllPermutation { public static void main(String[] args) { char[] source=new char[]{'A','B','C'}; char[] result=new char[source.length]; allPermutation(0,source,result); } public static void al

算法之使用递归求解全排列

在python中有一个模块叫做itertools,使用这个模块能够快速的求解排列组合问题,刚好朋友问到怎么求全排列问题,不能用内置模块去做,于是...自己想了想逻辑,使用递归实现比较简单. 下面是简单的实现代码: 1 #!/usr/bin/env python 2 # encoding:utf-8 3 # __author__: huxianglin 4 # date: 2016/9/25 12:09 5 # blog: http://huxianglin.cnblogs.com/ http:/

递归之全排列问题

一.问题描述 如输入一个字符串abc,其中的元素都不一样,则根据数学知识很容易得知道它的全排列有n!=3!=6; 即abc;acb;bac;bca;cab;cba; 当然如果包含重复元素,如aab,实际的全排列是:aab;aba;baa三种,则需要剔除掉重复的情况. 这里我们就是研究如何准确无误的将其所有的排列进行统计以及显示等. 二.问题分析 对全排列问题而言,其过程可以理解为递归思想.如abc,我们先任意取一个元素如a,则对bc进行全排列,依次类推 直到最后只有一个元素全排列,即是它本身.

递归解决全排列生成算法

排列:从n个元素中任取m个元素,并按照一定的顺序进行排列,称为排列: 全排列:当n==m时,称为全排列: 比如:集合{ 1,2,3}的全排列为: { 1 2 3} { 1 3 2 } { 2 1 3 } { 2 3 1 } { 3 2 1 } { 3 1 2 } 方法一: 我们可以将这个排列问题画成图形表示,即排列枚举树,比如下图为{1,2,3}的排列枚举树,此树和我们这里介绍的算法完全一致: 算法思路: (1)n个元素的全排列=(n-1个元素的全排列)+(另一个元素作为前缀): (2)出口:如

Java用递归实现全排列,详细

package edu.cqu.algorithmTest; import java.util.Scanner; // 全排列,递归实现 public class Main8 { public static void main(String[] args) { int[] arr = { 1, 2, 3}; bfs(arr, 0, arr.length - 1); } public static void bfs(int []a,int start,int end) { /* * 递归的终点是,

快速排序基本思想,递归写法,python和java编写快速排序

1.基本思想 快速排序有很多种编写方法,递归和分递归,分而治之法属于非递归,比递归简单多了.在这不使用代码演示.下面我们来探讨一下快速排序的递归写法思想吧. 设要排序的数组是A[0]……A[N-1],首先任意选取一个数据(通常选用数组的第一个数)作为关键数据,然后将所有比它小的数都放到它左边,所有比它大的数都放到它右边,这个过程称为一趟快速排序.值得注意的是,快速排序不是一种稳定的排序算法,也就是说,多个相同的值的相对位置也许会在算法结束时产生变动. 2.python实现 # coding:ut

递归实现全排列(一)

[思路] 下面用具体例子来阐述这种实现的思路,例如实现123的全排列组合. 要求123的全排列,可以分为以下情况: 情况1:第0位为1+23的全排列 情况2:第0位为2+13的全排列 情况3:第0位为3+32的全排列 上面的情况用代码实现如下: //情况1 //为了跟下面一致,加上swap(list[0],list[0]); perm(list,1,2); //为了跟下面一致,加上swap(list[0],list[0]); //情况2 swap(list[0],list[1]); perm(l

递归解决全排列算法

排列:从n个元素中任取m个元素,并按照一定的顺序进行排列,称为排列: 全排列:当n==m时,称为全排列: 比如:集合{ 1,2,3}的全排列为: { 1 2 3} { 1 3 2 } { 2 1 3 } { 2 3 1 } { 3 2 1 } { 3 1 2 } 我们可以将这个排列问题画成图形表示,即排列枚举树,比如下图为{1,2,3}的排列枚举树,此树和我们这里介绍的算法完全一致: 算法思路: (1)n个元素的全排列=(n-1个元素的全排列)+(另一个元素作为前缀): (2)出口:如果只有一个

递归实现全排列算法-161029

算法要点: n个元素的全排列:一个元素放在最前方,剩下n-1个元素的全排列 出口:当就剩下一个元素需要全排列的时候,把数组打印出来就行了 http://blog.csdn.net/xiazdong/article/details/7986015------------写的比黑皮书好致敬! 没想明白的地方:当一个元素需要全排列时,这时候打印数组,说明这个时候数组整个就已经被改变了. 所以在之前,应该做 把一个元素放在最前方, 在之后,把数组恢复成原来的样子 所以要用swap函数 perm(type