Python不熟悉

不同的做法

404. Sum of Left Leaves

这是我的做法,AC。

class Solution(object):
res = 0
def recursive(self, root):
if root == None:
return
if root.left != None and root.left.left == None and root.left.right == None:
self.res += root.left.val
self.recursive(root.left)
self.recursive(root.right)
def sumOfLeftLeaves(self, root):
"""
:type root: TreeNode
:rtype: int
"""
self.recursive(root)
return self.res

也可以进行迭代:

# Definition for a binary tree node.
# class TreeNode(object):
# def __init__(self, x):
# self.val = x
# self.left = None
# self.right = None
class Solution(object):
def sumOfLeftLeaves(self, root):
"""
:type root: TreeNode
:rtype: int
"""
## 3rd try: iterative bfs
if not root:
return 0
self.queue = [root]
self.ans = 0
while self.queue:
n = self.queue.pop(0)
if n.left:
if n.left.left == None and n.left.right == None:
self.ans += n.left.val
else:
self.queue.append(n.left)
if n.right:
self.queue.append(n.right)
return self.ans
## 3.2: iterative dfs
'''
if not root:
return 0 self.res = 0
self.stack = [root]
while self.stack:
node = self.stack.pop() if node.left:
if node.left.left is None and node.left.right is None:
self.res += node.left.val
else:
self.stack.append(node.left)
if node.right:
self.stack.append(node.right) return self.res
'''
## 2nd try with help from discussion: recursive on local variable
'''
if root == None:
return 0
ans = 0
if root.left and root.left.left == None and root.left.right == None:
ans = root.left.val
return ans + self.sumOfLeftLeaves(root.left) + self.sumOfLeftLeaves(root.right)
'''
## 1st try: recursive on global variable
'''
self.ans = 0 def dfs(root, isLeft):
if root == None:
return
if not root.left and not root.right:
if isLeft:
self.ans += root.val
return
dfs(root.left, True)
dfs(root.right, False) dfs(root, False)
return self.ans
'''

没有理解题意

563. Binary Tree Tilt

AC版本:

# Definition for a binary tree node.
# class TreeNode(object):
# def __init__(self, x):
# self.val = x
# self.left = None
# self.right = None
class Solution(object):
count = 0
def recursive(self, root):
if root == None:
return 0
left = self.recursive(root.left)
right = self.recursive(root.right)
self.count += abs(left - right)
return root.val + left + right
def findTilt(self, root):
"""
:type root: TreeNode
:rtype: int
"""
self.recursive(root)
return self.count

加速版本,利用tuple一个保存累积的tilt,一个保存当前结点的子结点的和:

class Solution(object):
def findTilt(self, root):
"""
:type root: TreeNode
:rtype: int
"""
if not root:
return 0
(tree_tilt,s)=self.recurTilt(root)
return tree_tilt
def recurTilt(self,root):
#return tree tilt, and tree nodes sum
if not root:
return 0,0
(ltree_tilt,l_sum)=self.recurTilt(root.left)
(rtree_tilt,r_sum)=self.recurTilt(root.right)
node_tilt=abs(l_sum-r_sum)
return (ltree_tilt+rtree_tilt+node_tilt,l_sum+r_sum+root.val)

并不是简单的计算两个结点的值的绝对值,而是将两个结点的子结点的和求绝对值差,比如说下面这个例子:

它计算的过程应该是(5 - 0) + (4 - 0) + ((3 + 5) - (2 + 4)) ,最终的结果是11,所以像我之前没有计算当前结点的两个子结点的和都是错的。

class Solution(object):
count = 0
def recursive(self, root):
if root == None:
return 0
if root.left and root.right:
self.count += abs(root.left.val - root.right.val)
elif root.left:
self.count += root.left.val
elif root.right:
self.count += root.right.val
self.recursive(root.left)
self.recursive(root.right)
def findTilt(self, root):
"""
:type root: TreeNode
:rtype: int
"""
if not root:
return 0
self.recursive(root)
return self.count

Python LeetCode的更多相关文章

  1. python leetcode 1

    开始刷 leetcode, 简单笔记下自己的答案, 目标十一结束之前搞定所有题目. 提高一个要求, 所有的答案执行效率必须要超过 90% 的 python 答题者. 1. Two Sum. class ...

  2. python leetcode 日记 --Contains Duplicate II --219

    题目: Given an array of integers and an integer k, find out whether there are two distinct indices i a ...

  3. python LeetCode 两数相除

    近一个月一直在写业务,空闲时间刷刷leetcode,刷题过程中遇到了一道比较有意思的题目,和大家分享. 题目描述: 给定两个整数,被除数 dividend 和除数 divisor.将两数相除,要求不使 ...

  4. python leetcode 日记 --Contains Duplicate --217

    题目 Given an array of integers, find if the array contains any duplicates. Your function should retur ...

  5. Python [Leetcode 345]Reverse Vowels of a String

    题目描述: Write a function that takes a string as input and reverse only the vowels of a string. Example ...

  6. python leetcode 颠倒二进制数

    我的做法,,这个题在于必须补0 def reverseBits(n): num=32-len(bin(n)[2:]) m = bin(n)[2:][::-1] if num > 0: for i ...

  7. python(leetcode)-重复元素算法题

    leetcode初级算法 问题描述 给定一个整数数组,判断是否存在重复元素. 如果任何值在数组中出现至少两次,函数返回 true.如果数组中每个元素都不相同,则返回 false. 该问题表述非常简单 ...

  8. python(leetcode)-344反转字符串

    编写一个函数,其作用是将输入的字符串反转过来.输入字符串以字符数组 char[] 的形式给出. 不要给另外的数组分配额外的空间,你必须原地修改输入数组.使用 O(1) 的额外空间解决这一问题. 你可以 ...

  9. python(leetcode)-48旋转图像

    给定一个 n × n 的二维矩阵表示一个图像. 将图像顺时针旋转 90 度. 说明: 你必须在原地旋转图像,这意味着你需要直接修改输入的二维矩阵.请不要使用另一个矩阵来旋转图像. 示例 1: 给定 m ...

随机推荐

  1. 取消PHPCMS V9后台新版本升级提示信息

    方法非常简单,只要找到文件: phpcms/libs/classes/update.class.php 文件,修改第50行的代码(大概位置): function notice() { return $ ...

  2. 二叉树问题(区间DP好题)

    二叉树问题 时间限制: 1 Sec  内存限制: 128 MB 题目描述 Petya Bulochkin很幸运:他得到了一份在"Macrohard"公司的工作.他想要展现他的才华, ...

  3. Entity Framework入门教程: Entity Framework支持的查询方式

    Entity Framework支持的查询方式有三种 LINQ to Entities Entity SQL Native SQL [LINQ to Entities] LINQ(语言集成查询)是从V ...

  4. is not allowed to connect to this MySQL server

    解决办法: 这是告诉你没有权限连接指定IP的主机mysql --user=root -p; use mysql; GRANT SELECT,INSERT,UPDATE,DELETE ON host.* ...

  5. php中memcache的运用

    <?php /** * •Memcache::add — 增加一个条目到缓存服务器 * •Memcache::addServer — 向连接池中添加一个memcache服务器 * •Memcac ...

  6. Java总结之线程(1)

    java线程是很重要的一项,所以作为java程序员必须要掌握的. 理解java线程必须先理解线程在java中的生命周期.. 1.java线程生命周期 1.new  创建一个线程  java中创建线程有 ...

  7. 读RCNN论文笔记

    1. RCNN的模型(如下图)描述: RCNN相比传统的物体检测,还是引入传统的物体检测的基本流程,先找出候选目标物体,逐个的提取特征,不过rbg大神引入了当时炙手可热的CNN卷积网络取代传统上的HO ...

  8. Gist - ES6 Proxy

    Introduction "Proxy" is a frequently used pattern in both virtual world and real world. Th ...

  9. A start job is running for xxx to stop

    CentOS7开机时,遇到这样的问题已经好多回了,查阅了许多这样的问题,总是没能找到自己想要的答案. 今天本来启动顺利,但是设置mysql.httpd服务开机启动之后,再次开机时又遇到这样的问题. 这 ...

  10. PHP面向对象概述

    结构化编程 在程序设计的早期,程序用流程图和自顶向下的方法设计.采用这种设计方法,程序员会将一个大的问题分解成更小的任务,然后为每个更小的任务编写一个过程(或函数).最后,程序员会编写一个主过程来启动 ...