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 ...
随机推荐
- flask 扩展之 -- flask-moment
一. 安装 $ pip install flask-moment 二. 初始化 from flask_moment import Moment moment = Moment(app) 三. 解决依赖 ...
- javaScript的一些奇妙动画
今天我给大家讲一下JavaScript中的显示隐藏.淡入淡出的效果 显示与隐藏动画效果 show()方法: show()方法会动态地改变当前元素的高度.宽度和不透明度,最终显示当前元素,此时 ...
- ASP.NET Core 源码学习之 Options[1]:Configure
配置的本质就是字符串的键值对,但是对于面向对象语言来说,能使用强类型的配置是何等的爽哉! 目录 ASP.NET Core 配置系统 强类型的 Options Configure 方法 源码解析 ASP ...
- eclispe JavaEE 配置tomcat
http://blog.csdn.net/hongshan50/article/details/8293526 http://blog.csdn.net/longshengguoji/article/ ...
- java中volatile不能保证线程安全
今天打了打代码研究了一下java的volatile关键字到底能不能保证线程安全,经过实践,volatile是不能保证线程安全的,它只是保证了数据的可见性,不会再缓存,每个线程都是从主存中读到的数据,而 ...
- Reflect(反射)
反射.反射,程序员的快乐.反射是无处不在的. 那么什么是反射:通过反射,可以在运行时获得程序或程序集中每一个类型(包括类.结构.委托.接口和枚举等)的成员和成员的信息.有了反射,即可对每一个类型了如指 ...
- 【Android Developers Training】 56. 更效率地加载大图片
注:本文翻译自Google官方的Android Developers Training文档,译者技术一般,由于喜爱安卓而产生了翻译的念头,纯属个人兴趣爱好. 原文链接:http://developer ...
- Sublime text3插件安装方法
一.安装sublime text3插件的方法: 1.Ctrl+~键,调出console,将下面代码复制到底部命令行,回车: import urllib.request,os; pf = 'Packag ...
- Ionic 2+ 安卓环境搭建
安装 安卓studio https://developer.android.com/studio/index.html 设置一个环境变量 _JAVA_OPTIONS:-Xmx512M 添加androi ...
- Js作用域&作用域链
js构建类 一 构建类的原则 构造函数 等于 原型的constructor //构造函数 function Hero(name,skill){ this.name = name; this.skill ...