【发布时间】:2016-05-23 13:48:11
【问题描述】:
我正在尝试找出解决这个 LeetCode 问题Palindrome Partitioning 的方法。这是我目前拥有的:
def partition(s):
out = []
def isPalindrome(word):
return word == word[::-1]
def addPalindrome(word, start, partition):
if start == len(word):
out.append(partition) #where I append to 'out'
print out, partition # where I print the finished partition
return
for i in range(start+1, len(word)+1):
sub = word[start:i]
if isPalindrome(sub):
partition.append(sub)
addPalindrome(word, i, partition)
partition.pop()
if not s:
return []
addPalindrome(s, 0, [])
return out
print partition('aaa')
输入“aaa”的正确解是[['a', 'a', 'a'], ['a', 'aa'], ['aa', 'a'], ['aaa']]。当我在基本情况下打印partition 时,它似乎是正确的。我将它们附加到一个 out 变量,该变量应该超出递归范围并正确返回。
然而事实并非如此。我不明白为什么在基本情况下打印 out 会导致:
[['a', 'a', 'a']]
[['a', 'aa'], ['a', 'aa']]
[['aa', 'a'], ['aa', 'a'], ['aa', 'a']]
[['aaa'], ['aaa'], ['aaa'], ['aaa']]
最后返回out时,似乎返回了空数组。这是怎么回事?
out递归后的输出为[[], [], [], []]。
这是 Python2.7
【问题讨论】:
-
您一次又一次地使用相同的
partition列表。每次想要一个新的时都必须创建一个新的,否则您的结果数组只包含对同一partition列表的 4 个引用。 -
这里,如果你想让它“固定”,你必须创建一个副本,比如
out.append(list(partition))
标签: python recursion reference