leetcood学习笔记-437-路径总和③**
题目描述:
方法一:栈
class Solution(object):
def pathSum(self, root, sum):
"""
:type root: TreeNode
:type sum: int
:rtype: int
"""
count = 0
if root == None:
return count
stack = [(root,[root.val])]
while stack != []:
tree,number = stack.pop()
for i in number:
if i == sum:
count += 1
if tree.left:
stack.append((tree.left,[tree.left.val]+[_+tree.left.val for _ in number]))
if tree.right:
stack.append((tree.right,[tree.right.val]+[_+tree.right.val for _ in number]))
return count
方法二:
class Solution:
def pathSum(self, root, sum):
"""
:type root: TreeNode
:type sum: int
:rtype: int
"""
self.result = 0
self.sum = sum
current_sum_list = [] def current_sum(root, current_sum_list):
if root is not None:
for i in range(len(current_sum_list)):
current_sum_list[i] += root.val
if current_sum_list[i] == self.sum:
self.result += 1
current_sum_list.append(root.val)
if root.val == self.sum:
self.result += 1
# print(current_sum_list) current_sum(root.left, current_sum_list[:])
current_sum(root.right, current_sum_list[:]) current_sum(root, current_sum_list) return self.result
方法三:最快
class Solution(object):
def pathSum(self, root, sum):
from collections import defaultdict
lookup = defaultdict(int)
lookup[0] = 1
self.res = 0 def helper(root,curSum):
if not root:
return
curSum += root.val
self.res += lookup[curSum - sum]
lookup[curSum] += 1
helper(root.left,curSum)
helper(root.right,curSum)
lookup[curSum] -= 1
helper(root,0)
return self.res
leetcood学习笔记-437-路径总和③**的更多相关文章
- leetcood学习笔记-113-路径总和 II
题目描述: 参考后的提交: class Solution(object): def pathSum(self, root, sum): """ :type root: T ...
- leetcood学习笔记-112-路径总和
题目描述: 第一次提交: class Solution(object): def hasPathSum(self, root, sum): """ :type root: ...
- leetcood学习笔记-39-组合总和
题目描述: 方法一: class Solution: def combinationSum(self, candidates, target): """ :type ca ...
- 【LeetCode】437. 路径总和 III
437. 路径总和 III 给定一个二叉树,它的每个结点都存放着一个整数值. 找出路径和等于给定数值的路径总数. 路径不需要从根节点开始,也不需要在叶子节点结束,但是路径方向必须是向下的(只能从父节点 ...
- Java实现 LeetCode 437 路径总和 III(三)
437. 路径总和 III 给定一个二叉树,它的每个结点都存放着一个整数值. 找出路径和等于给定数值的路径总数. 路径不需要从根节点开始,也不需要在叶子节点结束,但是路径方向必须是向下的(只能从父节点 ...
- Leetcode 437.路径总和III
路径总和III 给定一个二叉树,它的每个结点都存放着一个整数值. 找出路径和等于给定数值的路径总数. 路径不需要从根节点开始,也不需要在叶子节点结束,但是路径方向必须是向下的(只能从父节点到子节点). ...
- [LeetCode] 437. 路径总和 III ☆☆☆(递归)
路径总和 III 描述 给定一个二叉树,它的每个结点都存放着一个整数值. 找出路径和等于给定数值的路径总数. 路径不需要从根节点开始,也不需要在叶子节点结束,但是路径方向必须是向下的(只能从父节点到子 ...
- leetcood学习笔记-257-二叉树的所有路径
题目描述: 第一次提交:参考113-路径总和② class Solution: def binaryTreePaths(self, root: TreeNode) -> List[str]: r ...
- Android学习笔记——文件路径(/mnt/sdcard/...)、Uri(content://media/external/...)学习
一.URI 通用资源标志符(Universal Resource Identifier, 简称"URI"). Uri代表要操作的数据,Android上可用的每种资源 - 图像.视频 ...
随机推荐
- Android Service完全解析(上)
转载:http://blog.csdn.net/guolin_blog/article/details/11952435 相信大多数朋友对Service这个名词都不会陌生,没错,一个老练的Androi ...
- AtCoder Grand Contest 001F Wide Swap
解法参考这位大佬的:https://www.cnblogs.com/BearChild/p/7895719.html 因为原来的数组不好做于是我们想反过来数组,根据交换条件:值相邻且位置差大于等于k, ...
- MYSQL-连续出现的数字
编写一个 SQL 查询,查找所有至少连续出现三次的数字. +----+-----+| Id | Num |+----+-----+| 1 | 1 || 2 | 1 || 3 | 1 || 4 | 2 ...
- nodejs进阶:密码加盐:随机盐值
demo var crypto = require('crypto'); function getRandomSalt(){ return Math.random().toString().slice ...
- 安装express 出现 错误
w 在网上找了很多都解决不了问题,直到换了文件新建路径就可以了 成功: 学习就是不断发现问题解决问题的过程
- liunx下在线安装mysql
一:在线安装mysql 1.首先检测一下,mysql之前有没有被安装 命令:rpm -qa | grep mysql 2.删除mysql的命令: rpm -e --nodeps `rpm -qa | ...
- Robot Framework:变量与运算
设置变量 ...
- linux IPC socket
套接字是通讯端点的抽象 创建一个套接字 #include <sys/types.h> #include <sys/socket.h> int socket(int domain ...
- 基础课(三)实验串入OSPF协议和HSRP协议以及HSRP外部链路跟踪
实验要求1: ,2,3,4分别是vlan10,20,30,40的网关(网关IP-192.168.X.254 /24) 对vlan10做HSRP热备 SW1做主网关,SW2做备份网关 ...
- 使用PaxScript为Delphi应用增加对脚本的支持
通过使用PaxScript可以为Delphi应用增加对脚本的支持. PaxScript支持paxC,paxBasic,paxPascle,paxJavaScript(对ECMA-262做了扩展) 四种 ...