时间:2021年7月20日
作者:Afollower
分类: 学习记录/Python/杂记
’+’ 会返回新的list对象,append在原list对象上追加
1. 问题发现,牛客练习题
NC8 二叉树根节点到叶子节点和为指定值的路径
给定一个二叉树和一个值\ sum sum,请找出所有的根节点到叶子节点的节点值之和等于\ sum sum 的路径,
例如:
给出如下的二叉树,\ sum=22 sum=22,
返回
[
[5,4,11,2],
[5,8,9]
]
1.1 刚开始代码
在返回结果时,出现很多不应该出现的数,就是由于使用append保存结果,一直都是对同一list对象进行修改。
class Solution:
def pathSum(self , root , sum ):
# write code here
if not root:
return []
res = []
def dfs(root, target, sub_list):
sub_list.append(root.val)
target -= root.val
if target == 0 and root.left == None and root.right == None:
res.append(sub_list)
return
if root.left:
dfs(root.left, target, sub_list)
if root.right:
dfs(root.right, target, sub_list)
dfs(root, sum, [])
1.2 优化后
通过 list1= list1 + list2, 不断新建list对象,最终只保留满足条件的list。
class Solution:
def pathSum(self , root , sum ):
# write code here
if not root:
return []
res = []
def dfs(root, target, sub_list):
sub_list = sub_list + [root.val]
target -= root.val
if target == 0 and root.left == None and root.right == None:
res.append(sub_list)
return
if root.left:
dfs(root.left, target, sub_list)
if root.right:
dfs(root.right, target, sub_list)
dfs(root, sum, [])
2. + 和 append区别
a = []
b = []
for i in range(2):
a = a + [i]
b.append(i)
print('a={} b={}'.format(a,b))
print('a_address: {} b_address: {}'.format(id(a), id(b)))
输出:
a=[0] b=[0]
a_address: 2232821306632 b_address: 2232821306568
a=[0, 1] b=[0, 1]
a_address: 2232821325512 b_address: 2232821306568