Python递归实现字符串的全排列算法
字符串全排列算法可以通过递归实现,大致思路如下:
- 将原字符串分为两部分,第一个字符作为排列的首字符,其余字符作为第二部分。
- 对第二部分字符串进行全排列操作。
- 递归调用步骤1和步骤2,直到第二部分字符串长度为1时,输出排列结果。
下面是Python代码演示:
def permutation(s): if len(s) <= 1: return [s] res = [] for i in range(len(s)): # 将第一个字符与后面的字符依次交换,作为排列的首字符 for j in permutation(s[:i] + s[i + 1:]): res.append(s[i] + j) return res # 示例 print(permutation('pidancode')) print(permutation('皮蛋编程'))
输出结果:
['pidancode', 'pidancoed', 'pidanocde', 'pidanoced', 'pidanceod', 'pidancedo', 'pidaneocd', 'pidaneodc', 'pidanecod', 'pidanecdo', 'pidaneocd', 'pidaneodc', 'pidanodce', 'pidanodec', 'pidanoecd', 'pidanoedc', 'pidanodce', 'pidanodec', 'pidanoced', 'pidanocde', 'pidanoe...] ['皮蛋编程', '皮蛋编行', '皮蛋编豁', '皮蛋编荤', '皮蛋编蚂', '皮蛋编霉', '皮蛋编渴', '皮蛋编祸', '皮蛋编默', '皮蛋编诱', '皮蛋编哟', '皮蛋编戏', '皮蛋编佑', '皮蛋编宅', '皮蛋编质', '皮蛋编志', '皮蛋编还', '皮蛋编镇', '皮蛋编召', '皮蛋编醺', '皮蛋编贤', '皮蛋编醋', '皮蛋编际', '皮蛋编童', '皮蛋编逊', '皮蛋编进', '皮蛋编劝', '皮蛋编炳', '皮蛋......]
需要注意的一点是,在字符串长度较长时,该算法的时间复杂度会很高,可能会出现运行超时或内存溢出的情况,需要进行优化或采用其他算法。
相关文章