【python】求一个字符串所有的排列?

题目:设计一个程序,当输入一个字符串时,要求输出这个字符串的所有排列。例如输入字符串abc,要求输出由字符串a,b,c所能排列出来的所有的字符串:abc,acb,bac,bca,cba,cab。

分析:递归法。以字符串abc为例子介绍对字符串进行全排列的方法。

(1)首先固定第一个字符a,然后对后面两个字符b与c进行全排列。

(2)交换第一个字符与后面的字符,即交换a与b,然后固定第一个字符b,接着对后面的两个字符a与c进行全排列。

(3)由于第(2)步交换了a和b破坏了字符串原来的顺序,因此,需要再次交换a和b使其恢复到原来的顺序,然后交换第一个字符和第三个字符(交换a和c),接着固定第一个字符c,对后面的两个字符a与b求全排列。

注:在使用递归方法求解的时候,需要注意以下两个问题:(1)逐渐缩小问题的规模,并且可以用同样的方法来求解子问题。(2)递归一定要有结束,否则会导致程序陷入死循环。

code:

# 交换字符数组下标为i和j对应的字符

def swap(str, i, j):

    temp = str[i]

    str[i] = str[j]

    str[j] = temp

# 对字符串中的字符串进行全排列

# str为待排序的字符串,start为待排序的子字符串的首字符下标

def Permutation(str, start):

    if str is None or len(str) < 0:

        return

    # 完成完全排列后输出当前排列的字符串

    if start == len(str) - 1:

        print("".join(str))

    else:

        i = start

        while i < len(str):

            # 交换start与i所在位置的字符

            swap(str, start, i)

            # 固定第一个字符,对剩余的字符进行全排列

            Permutation(str, start + 1)

            # 还原start与i所在位置的字符

            swap(str, start, i)

            i += 1

def Permutation_transe(s):

    str = list(s)

    Permutation(str, 0)

if __name__ == "__main__":

    s = 'abc'

    Permutation_transe(s)

程序运行结果:

abc

acb

bac

bca

cba

cab

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 在C语言中,五种基本数据类型存储空间长度的排列顺序是: A)char B)char=int<=float C)ch...
    夏天再来阅读 3,421评论 0 2
  • 专业考题类型管理运行工作负责人一般作业考题内容选项A选项B选项C选项D选项E选项F正确答案 变电单选GYSZ本规程...
    小白兔去钓鱼阅读 9,059评论 0 13
  • 一、Python简介和环境搭建以及pip的安装 4课时实验课主要内容 【Python简介】: Python 是一个...
    _小老虎_阅读 5,822评论 0 10
  • 字符串的全排列 题目描述: 输入一个字符串,打印出该字符串中字符的所有排列。 例如输入字符串abc,则输出由字符a...
    MinoyJet阅读 11,327评论 4 11
  • 还有几天,阳就八个月了。这个时候对共读做一个回顾感受,是因为我觉得与阳的共读有了一个质的飞跃。 最近,他不再随便撕...
    丢了朵朵阅读 609评论 0 2