擅长:python、mysql、java
<p>只是为了好玩,这里有一个生成器版本的算法。它更好一点,因为它不需要那些<code>out</code>列表。你知道吗</p>
<pre><code>def permute(s):
if len(s) == 1:
yield s
else:
for i, let in enumerate(s):
for perm in permute(s[:i] + s[i+1:]):
yield let + perm
for s in permute("abc"):
print(s)
</code></pre>
<p><strong>输出</strong></p>
<pre><code>abc
acb
bac
bca
cab
cba
</code></pre>
<p>当然,除非问题需要递归(例如处理递归数据结构,如树),否则最好避免递归(尤其是在Python中)。当然,真正的Python程序通常会使用<a href="https://docs.python.org/3/library/itertools.html#itertools.permutations" rel="nofollow noreferrer">^{<cd2>}</a>,除非它需要正确处理基序列中的重复项。在这种情况下,我推荐Narayana Pandita的迭代算法,如<a href="https://stackoverflow.com/a/31678111/4014959">this answer</a>所示。你知道吗</p>