如何实现递归方式来编写字符串的排列?
例如,如果输入为'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'],[''],[''])
答案 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"], "")