def permutationString(word):
print('word', word)
result = []
if len(word) == 0:
result.append('')
return result
for i in range(len(word)):
before = word[0 : i]
after = word[i + 1 :]
print('before',before)
print('after', after)
partials = permutationString(before + after)
print(partials)
for s in partials:
result.append(word[i] + s)
return result
这是我为给定字符串生成排列的解决方案。
对于输入abc
,它给了我['abc', 'acb', 'bac', 'bca', 'cab', 'cba']
,这似乎是正确的。
我的问题是,我不太了解魔术的工作原理。代码本身非常直观。我们只是尝试将每个字符作为第一个字符,然后附加排列。
但是我真的不知道如何生成partials
,并且不确定result.append('')
为空时不执行word
时解决方案如何工作。
对魔术的运作方式是否有直观的解释?
答案 0 :(得分:1)
简短的答案是,只有一种方法可以编写不包含元素的序列。那是空序列。因此,包含所有.Value
排列的列表为''
。
假设您弄错了,然后返回['']
,即没有解决方案。那会发生什么呢?
好吧,正如您所说的,在归纳法中,您尝试将每个元素作为第一个元素,然后将其放在没有该元素的置换解决方案的前面。因此,考虑一个只有一个元素[]
的序列。您将把'x'
放在所有x
解决方案的前面。如果''
的排列返回了''
,那是一个没有解决方案的空列表,那么您将没有解决方案将[]
放在前面。不过它会返回x
,因此您将['']
放在该解决方案'x'
的前面。
奖金
一旦您知道了它,您可能想尝试另一种类似的算法来计算排列。
尝试在每个递归步骤中仅选择第一个元素''
来构建word
的所有排列,然后以某种方式将其与word[0]
排列的解决方案“结合”。