Python LeetCode
Python不熟悉
不同的做法
这是我的做法,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的更多相关文章
- python leetcode 1
开始刷 leetcode, 简单笔记下自己的答案, 目标十一结束之前搞定所有题目. 提高一个要求, 所有的答案执行效率必须要超过 90% 的 python 答题者. 1. Two Sum. class ...
- 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 ...
- python LeetCode 两数相除
近一个月一直在写业务,空闲时间刷刷leetcode,刷题过程中遇到了一道比较有意思的题目,和大家分享. 题目描述: 给定两个整数,被除数 dividend 和除数 divisor.将两数相除,要求不使 ...
- python leetcode 日记 --Contains Duplicate --217
题目 Given an array of integers, find if the array contains any duplicates. Your function should retur ...
- 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 ...
- python leetcode 颠倒二进制数
我的做法,,这个题在于必须补0 def reverseBits(n): num=32-len(bin(n)[2:]) m = bin(n)[2:][::-1] if num > 0: for i ...
- python(leetcode)-重复元素算法题
leetcode初级算法 问题描述 给定一个整数数组,判断是否存在重复元素. 如果任何值在数组中出现至少两次,函数返回 true.如果数组中每个元素都不相同,则返回 false. 该问题表述非常简单 ...
- python(leetcode)-344反转字符串
编写一个函数,其作用是将输入的字符串反转过来.输入字符串以字符数组 char[] 的形式给出. 不要给另外的数组分配额外的空间,你必须原地修改输入数组.使用 O(1) 的额外空间解决这一问题. 你可以 ...
- python(leetcode)-48旋转图像
给定一个 n × n 的二维矩阵表示一个图像. 将图像顺时针旋转 90 度. 说明: 你必须在原地旋转图像,这意味着你需要直接修改输入的二维矩阵.请不要使用另一个矩阵来旋转图像. 示例 1: 给定 m ...
随机推荐
- 用CSS美化checkbox复选按钮和raido单选按钮-适用于移动端
最终效果: 实现方法 index.html: <!DOCTYPE html> <html> <head> <title></title> & ...
- Windows下安装Python扩展模块提示Unable to find vcvarsall.bat的问题
本文内容 Unable to find vcvarsall.bat的问题描述 问题分析 总结 提示: 如果你只是想知道自己需要安装哪个版本的Visual Studio请直接查看本文最后一个小节的内容. ...
- 数列[专杀Splay版]
时间限制: 3 Sec 内存限制: 128 MB提交: 49 解决: 7 题目描述 输入一个数列,你需要进行如下操作: 1. 把编号为I的数值改为K 2. 输出从小到大排序后第k个数 输入 输 ...
- 记一次服务器Tomcat优化经历
公司需要一台测试服务器来做测试用,所以花了几天时间把服务全部部署好,在部署好war包之后,发现Tomcat访问超级慢. 1.进入Tomcat的bin目录下,运行 ./catalina.sh run命令 ...
- java中的选择排序之降序排列
import java.util.Arrays;//必须加载 class Demo{ public static void main(String []args){ int[] arr={3,54,4 ...
- fiddler4手机抓包
- CSS3学习系列之背景相关样式(一)
新增属性: background-clip:指定背景的显示范围 background-origin:指定绘制背景图像时的起点 background-size:指定背景中图像的尺寸 background ...
- 巧用五招提升Discuz!X运行速度
Discuz!X使用的是数据库应用程序,所以,当数据库的大小.帖子的数目.会员的数目,这些因素都会影响到程序的检索速度,尤其是当论坛的影响力大了,这个问题就更为突出了,虽然,康盛对Discuz进行了更 ...
- Vivo展柜灯怎样设计才吸引大量客户?
1.vivo展柜灯计划的目标是使消耗者在无限的时空中最无效地承受信息.因而,vivo展柜灯计划便是围绕着怎样无效地进步展现活动的服从和质量停止的.除了展现环境本身的计划之外,展现对象陈列方式的计划也是 ...
- jzoj3760. 【BJOI2014】Euler
题目大意: 欧拉函数 φ(n) 定义为不超过正整数 n 并且与 n 互素的整数的数目. 可以证明 φ(n) = n ∗ ∏ (1 − 1 / pi). 其中 pi(1 <= i <= ...