• 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]
    View Code

    改进后的代码不会超时,

    # 执行用时 :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)
    View Code
  • 相关阅读:
    投影机的选择
    IOS 检测摇动
    MARK 我的第一个app完成
    2013年会抽奖程序
    给phpcms v9增加类似于phpcms 2008中的关键词表
    codeigniter 用.htcaccess做动态二级域名解析
    获取优酷、土豆、搜狐视频 HTML5视频m3u8格式源
    发现一个好的文学素材类网站
    mac MAMP下安装mongdb & RockMongo
    给artDialog 5.02 增加ajax get功能
  • 原文地址:https://www.cnblogs.com/xxswkl/p/12002884.html
Copyright © 2020-2023  润新知