python使用递归的所有可能的排列

时间:2015-06-02 03:29:49

标签: python string recursion

如何实现递归方式来编写字符串的排列? 例如,如果输入为'abc',我希望结果为:

[a', 'b', 'c', 'd', 'e', 'aa', 'ab', 'ac', 'ad', 'ae', 'ba',
 'bb','bc', 'bd', 'be', 'ca', 'cb', 'cc', 'cd', 'ce', 'da', 'db',
 'dc','dd', 'de', 'ea', 'eb', 'ec', 'ed', 'ee', 'aaa', 'aab', 'aac',
 'aad','aae', 'aba', 'abb', 'abc', 'abd', 'abe', 'aca', 'acb',
 'acc'....]

此外,如果结果中的字符串也包含在另一个列表中,则返回该字符串。例如,'a''b'位于[a,aaah,aahed,aahing,aahs,'b'],我想显示'a''b'

修改

我尝试使用for循环,但我得到了MemoryError

def perm(l,last,result)
    if len(result[-1]==len(l)):
        return result
    else:
        for i in l:
            for u in last:
                last.append(u+i)
         result.extend(last)
    perm(l,last,result)
    return result

perm(['a','b','c'],[''],[''])

1 个答案:

答案 0 :(得分:0)

生成当前长度的所有字符串,然后递归查找更长的字符串。

def perm(chars, prefix):
    result = []
    if len(prefix) < len(chars):
        for char in chars:
            result.append(prefix + char)
        for char in chars:
            result.extend(perm(chars, prefix + char))
    return result

print perm(["a", "b", "c"], "")