LeetCode#113 路径总和II Python

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

在这里插入图片描述
我做不出来
这就是#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的掌握太浅薄,看了一两天基础教程就开始刷题,就会时不时出现这些问题。。

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值