
我做不出来
这就是#112的升级,但我就是不会转弯呀
看别人题解,看半天算是懂了,尤其是tmp + [root.val]这个写法
# Definition for a binary tree node.
# class TreeNode:
# def __init__(self, x):
# self.val = x
# self.left = None
# self.right = None
class Solution:
def pathSum(self, root: TreeNode, sum: int) -> List[List[int]]:
if not root: return []
res = [] #存放最终结果
def helper(node, ans, tmp): #node:当前节点;ans:当前剩余路径值;tmp:已走过的路径
if not node.left and not node.right and ans == 0:
res.append(tmp)
if node.left:
helper(node.left, ans - node.left.val, tmp + [node.left.val])
if node.right:
helper(node.right, ans - node.right.val, tmp + [node.right.val])
helper(root, sum - root.val, [root.val])
return res
我一开始不理解的是为啥tmp+[node.left.val]这里不用tmp.append(node.left.val)
答主解释说:数组在Python中是可变对象,所以tmp+[node.left.val]相当于新建了一个对象,再将新节点值入栈,如果用append就相当于在原对象上做操作,就会导致路径中既会有左节点又会有右节点,肯定会导致错误。
我算是明白了个七七八八
主要是对Python的掌握太浅薄,看了一两天基础教程就开始刷题,就会时不时出现这些问题。。

本文通过一道算法题解析,深入探讨了Python中列表操作的微妙之处,特别是tmp+[node.val]与tmp.append(node.val)的区别,揭示了在递归算法中正确使用列表操作的重要性。
390

被折叠的 条评论
为什么被折叠?



