437路径总和III
题目: 给定一个二叉树,它的每个结点都存放着一个整数值。找出路径和等于给定数值的路径总数。路径不需要从根节点开始,也不需要在叶子节点结束,但是路径方向必须是向下的(只能从父节点到子节点)。
来源: https://leetcode-cn.com/problems/path-sum-iii/
法一: 自己的代码, 代码超时,原因是计算res的时候,没有用前面的结果,而是每次都重新计算一遍,这个时候一定要把要计算的结果作为参数进行传递,每次都对参数进行计算有几个结果符合.会大大减少计算的次数
# 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, su: int) -> int:
results = [0]
def judge(res):
a = []
while res:
a.append(res.pop())
if sum(a) == su:
results[0] = results[0] + 1
def recursion(root,res):
if root is None:
return
res.append(root.val)
# 每次都对res进行求和判断
judge(res[:])
recursion(root.left, res)
recursion(root.right, res)
res.pop()
recursion(root,res=[])
return results[0]
改进后的代码不会超时,
# 执行用时 :180 ms, 在所有 python3 提交中击败了93.22% 的用户
# 内存消耗 :33.4 MB, 在所有 python3 提交中击败了9.56%的用户
class Solution:
def pathSum(self, root: TreeNode, su: int) -> int:
results = [0]
def recursion(root,res):
if root is None:
return
# 先计算有几个满足条件的,再传res.切不可先传过去后计算,那样的话慢了一步,
res = [root.val+i for i in res] + [root.val]
results[0] = results[0] + res.count(su)
# res是可变对象,并且是直接传过去了,但由于res = [root.val+i for i in res] + [root.val]
# 中对res重新进行赋值了,所以函数结束调用后,res中的内容并未改变
recursion(root.left, res)
recursion(root.right,res)
recursion(root,res=[])
return results[0]
if __name__ == '__main__':
duixiang = Solution()
root = TreeNode(5)
a = TreeNode(4)
b = TreeNode(11)
c = TreeNode(2)
d = TreeNode(2)
root.left = a
a.left = b
b.left = c
b.right = d
su = 22
a = duixiang.pathSum(root, su)
print(a)
437路径总和III的更多相关文章
- 【LeetCode】437. 路径总和 III
437. 路径总和 III 给定一个二叉树,它的每个结点都存放着一个整数值. 找出路径和等于给定数值的路径总数. 路径不需要从根节点开始,也不需要在叶子节点结束,但是路径方向必须是向下的(只能从父节点 ...
- Java实现 LeetCode 437 路径总和 III(三)
437. 路径总和 III 给定一个二叉树,它的每个结点都存放着一个整数值. 找出路径和等于给定数值的路径总数. 路径不需要从根节点开始,也不需要在叶子节点结束,但是路径方向必须是向下的(只能从父节点 ...
- Leetcode 437.路径总和III
路径总和III 给定一个二叉树,它的每个结点都存放着一个整数值. 找出路径和等于给定数值的路径总数. 路径不需要从根节点开始,也不需要在叶子节点结束,但是路径方向必须是向下的(只能从父节点到子节点). ...
- [LeetCode] 437. 路径总和 III ☆☆☆(递归)
路径总和 III 描述 给定一个二叉树,它的每个结点都存放着一个整数值. 找出路径和等于给定数值的路径总数. 路径不需要从根节点开始,也不需要在叶子节点结束,但是路径方向必须是向下的(只能从父节点到子 ...
- 437. 路径总和 III
方法一:48 ms /* sumUp递归子程序求解以root为根节点的子节点之和为sum的路径数目; pathSum递归部分是把根节点逐一考察,如以root->left,以root->ri ...
- leetcode 437. 路径总和 III
题目描述: 给定一个二叉树,它的每个结点都存放着一个整数值. 找出路径和等于给定数值的路径总数. 路径不需要从根节点开始,也不需要在叶子节点结束,但是路径方向必须是向下的(只能从父节点到子节点). 二 ...
- [二叉树-根到叶的子路径]路径总和 III (两层递归)
题目437. 路径总和 III 给定一个二叉树,它的每个结点都存放着一个整数值. 找出路径和等于给定数值的路径总数. 路径不需要从根节点开始,也不需要在叶子节点结束,但是路径方向必须是向下的(只能从父 ...
- 437 Path Sum III 路径总和 III
给定一个二叉树,二叉树的每个节点含有一个整数.找出路径和等于给定数的路径总数.路径不需要从根节点开始,也不需要在叶节点结束,当路径方向必须是向下的(只从父节点到子节点).二叉树不超过1000个节点,节 ...
- Leetcode题目437:路径总和III(递归-简单)
题目描述: 给定一个二叉树,它的每个结点都存放着一个整数值. 找出路径和等于给定数值的路径总数. 路径不需要从根节点开始,也不需要在叶子节点结束,但是路径方向必须是向下的(只能从父节点到子节点). 二 ...
随机推荐
- python文件操作-1.将PDF转成Excel
# https://www.jianshu.com/p/f33233e4c712 import pdfplumber # 为了操作PDF from openpyxl import Workbook w ...
- IDEA Debug模式下启动慢的解决办法
工程没有做什么大的改动,近期Idea在debug模式下启动耗时800s +,run模式下200s.Idea debug模式启动的时候会有这样的提示: 方法断点会戏剧性的降低debug的速度.当时并没有 ...
- kafka常见命令
基础命令 查看已有topic 进入kafka解压目录:/home/zallds/kafka_2.10-0.10.2.1 执行如下命令,就会列出所有topic [zallds@PUBLIC-26 bin ...
- chown -R lyd usbsend
chown -R lyd usbsend chown -R lyd usbsend chown -R lyd usbsend 某一个目录下所有文件授权给lyd
- vsto 将图片加入到word里面
private void AddPictoWord() { string folderpath = @"C:\Users\k0021213\Pictures\QQ浏览器截图"; D ...
- Django-csrf中间件
一.详解csrf原理 csrf要求发送post,put,或者delete请求的时候,是先以get方式发送请求,服务端响应时会分配一个随机字符串给客户端,客户端第二次发送post,put或delete请 ...
- css设置元素垂直居中的几个方法
最近有人问我怎么设置元素垂直居中?我....(这么基础的东西都不会?我有点说不出话来), 不过还是耐心的教了他几个方法,好吧教完他们,顺便把这些方法整理一下 第一种:通过设置成为表格元素的方式来实现 ...
- Redis常用数据类型底层数据结构分析
Redis是一种键值(key-Value)数据库,相对于关系型数据库,它也被叫作非关系型数据库 Redis中,键的数据类型是字符串,但是为了非富数据存储方式,方便开发者使用,值的数据类型有很多 字符串 ...
- Windows Server 快速生成免费SSL证书 (letsencrypt)
最近官网需求部署个SSL证书,一番操作后把借鉴的网站与实际过程记录下来 Let's Encrypt,官网是https://letsencrypt.org/,它是一个由各大公司赞助的公益组织: 有趋势有 ...
- Java基础-自增自减运算符练习题
我们用一个简单的例子分析下边的运行结果: package demo; public class ZiZeng { int i = 0; test(i); // i = i++; i = ++i; Sy ...