Python:可以打印答案,但不能返回答案(回文分区)
在下面的Python代码中,当我输入s=ab时,我得到[[],我应该得到[[a,b]]。我已经分别检查了这两个函数,结果证明它们是正确的。我甚至可以在第26行打印出答案[[a,b]],但我无法从return中获得答案。我在这里很困惑,我很感激任何能帮助我的想法Python:可以打印答案,但不能返回答案(回文分区),python,Python,在下面的Python代码中,当我输入s=ab时,我得到[[],我应该得到[[a,b]]。我已经分别检查了这两个函数,结果证明它们是正确的。我甚至可以在第26行打印出答案[[a,b]],但我无法从return中获得答案。我在这里很困惑,我很感激任何能帮助我的想法 class Solution: # @param s, a string # @return a list of lists of string def partition(self, s): ##
class Solution:
# @param s, a string
# @return a list of lists of string
def partition(self, s):
############### Depth First Search: Usually we will use RECURSION a!!!
if s == "":
return [[]]
if len(s) == 1:
return [[s[0]]]
self.result = []
temp = []
stack = [] # stack is a 2D lists
for k in range(len(s)):
stack.append([])
for i in range(len(s)):
for j in range(i+1,len(s)+1):
substr = s[i:j]
if substr == substr[::-1]:
stack[i].append(s[i:j])
self.dfs(temp, stack, 0, len(s))
return self.result
def dfs(self, temp, stack, start, end):
if start == end:
self.result.append(temp)
print(self.result)
return
else:
for i in range(len(stack[start])):
temp.append(stack[start][i])
self.dfs(temp, stack, start+len(stack[start][i]), end)
temp.pop()
您正在递归调用之间共享临时值:
temp.append(stack[start][i])
self.dfs(temp, stack, start+len(stack[start][i]), end)
temp.pop()
temp引用的列表对象将附加到self.result:
但返回后,通过弹出再次清空共享列表对象。这将在打印后从共享列表对象中删除元素
您想附加一个副本:
你真的不需要临时工。只需构建新列表即可:
for item in stack[start]:
self.dfs([item], stack, start + len(item), end)
您只需在临时文件中添加一个项目,然后再次删除它;从一个空的临时列表开始,这意味着您也可以为递归调用构建新的列表对象
不要在一个范围内循环然后索引,只需直接在堆栈[start]上循环即可。我认为在函数dfs中,self.result.appendtemp会获取对象内的[[a,b]],因此当我在分区中返回self.result时,它应该是[[a,b]],但实际上会获取[[]。这里有什么问题吗?@frostnational:self.result设置好了,这就是分区返回的结果。谢谢你的回答,不过我需要一些时间来理解它。我认为对于最后一个递归调用,它是dfs[a,b],stack,2,2,所以当它运行时,self.result.appendtemp应该总是使self.result[[a,b]]成为self.result,不是吗?当我打印self.result时,它是正确的。为什么它在函数分区中不正确?@jasonccc:然后你的函数返回,temp仍然引用相同的嵌套列表对象。感谢添加注释。我现在明白了。我需要索引I,因为在“start+lenstack[start][I]”中有一个I,但是你说的这一点非常有意义@对不起,忘了一份推荐信。堆栈[start][i]被项替换。
if start == end:
self.result.append(temp[:])
for item in stack[start]:
self.dfs([item], stack, start + len(item), end)