python求一个字符串的所有排列的实现方法-创新互联

题目描述:

在武汉等地区,都构建了全面的区域性战略布局,加强发展的系统性、市场前瞻性、产品创新能力,以专注、极致的服务理念,为客户提供成都网站建设、做网站 网站设计制作按需求定制开发,公司网站建设,企业网站建设,品牌网站设计,全网营销推广,成都外贸网站制作,武汉网站建设费用合理。

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

方法:递归法

以字符串 abc 为例介绍对字符串进行全排列的方法。
(1) 首先固定第一个字符 a,然后对后面的两个字符 b、c 进行全排列;
(2) 交换第一个字符与其后面的字符,即交换 a 与 b,然后对后面的两个字符 a与c 进行全排列;
(3) 由于第二步交换了 a与b 破坏了字符串原来的顺序,所以需要再次交换 a与b 使其恢复到原来的顺序,然后交换第一个字符与第三个字符(交换a和c),接着固定第一个字符c,对后面的两个字符 a与b 求全排列。
在对字符串求全排列的时候就可以采用递归的方式求解。

python求一个字符串的所有排列的实现方法

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

代码实现:

#!/usr/bin/env python3
# -*- coding: utf-8 -*-
# @Time  : 2020/2/3 9:49
# @Author : buu
# @Software: PyCharm
# @Blog  :https://blog.csdn.net/weixin_44321080
def swap(str, i, j):
  # 交换字符数组下标为i和j对应的字符
  tmp = str[i]
  str[i] = str[j]
  str[j] = tmp


def permutation(str, start):
  """
  对字符串中的字符进行全排列
  :param str: 待排序的字符串,list
  :param start: 待排序的子字符串的首字符下标
  :return:
  """
  if str == None or start < 0:
    return
  if start == len(str) - 1:
    # 完成全排列后输出当前排列的字符串
    print(''.join(str),end=' ')
  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)

另外有需要云服务器可以了解下创新互联scvps.cn,海内外云服务器15元起步,三天无理由+7*72小时售后在线,公司持有idc许可证,提供“云服务器、裸金属服务器、高防服务器、香港服务器、美国服务器、虚拟主机、免备案服务器”等云主机租用服务以及企业上云的综合解决方案,具有“安全稳定、简单易用、服务可用性高、性价比高”等特点与优势,专为企业上云打造定制,能够满足用户丰富、多元化的应用场景需求。


当前名称:python求一个字符串的所有排列的实现方法-创新互联
文章网址:http://myzitong.com/article/dhcges.html