题目描述:
在武汉等地区,都构建了全面的区域性战略布局,加强发展的系统性、市场前瞻性、产品创新能力,以专注、极致的服务理念,为客户提供成都网站建设、做网站 网站设计制作按需求定制开发,公司网站建设,企业网站建设,品牌网站设计,全网营销推广,成都外贸网站制作,武汉网站建设费用合理。设计一个程序,当输入一个字符串时,要求输出这个字符串的所有排列。
例如输入字符串 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 求全排列。
在对字符串求全排列的时候就可以采用递归的方式求解。
在使用递归求解的时候,要注意:
(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许可证,提供“云服务器、裸金属服务器、高防服务器、香港服务器、美国服务器、虚拟主机、免备案服务器”等云主机租用服务以及企业上云的综合解决方案,具有“安全稳定、简单易用、服务可用性高、性价比高”等特点与优势,专为企业上云打造定制,能够满足用户丰富、多元化的应用场景需求。