这个递归方法如何在给定字符串的情况下生成排列?有人可以解释一下吗?
def exchange(self, s):
if 0 == len(s):
yield s
else:
for i in range(len(s)):
for p in self.exchange(s[:i] + s[i + 1:]):
yield [s[i]] + p
答案 0 :(得分:1)
代码具有以下想法:通过从输入中选择一个元素来交付所有排列,然后提供所选元素前置的剩余元素的所有排列。在此之后,重复另一个元素。
因此,如果您输入[0,1,2],则代码使用第一个元素(0)并构建其余元素(1和2)的所有排列。 (这些排列当然是[1,2]和[2,1]。)
然后它传递(产生)前置于[1,2]的0,然后将0前置为[2,1],i。即[0,1,2]和[0,2,1]。
然后继续并选择下一个元素(1)。然后它构建剩余元素(0,2)的排列(即,[0,2]和[2,0])。
等等。