Python不熟悉

不同的做法

404. Sum of Left Leaves

这是我的做法,AC。

  1. class Solution(object):
  2. res = 0
  3. def recursive(self, root):
  4. if root == None:
  5. return
  6. if root.left != None and root.left.left == None and root.left.right == None:
  7. self.res += root.left.val
  8. self.recursive(root.left)
  9. self.recursive(root.right)
  10. def sumOfLeftLeaves(self, root):
  11. """
  12. :type root: TreeNode
  13. :rtype: int
  14. """
  15. self.recursive(root)
  16. return self.res

也可以进行迭代:

  1. # Definition for a binary tree node.
  2. # class TreeNode(object):
  3. # def __init__(self, x):
  4. # self.val = x
  5. # self.left = None
  6. # self.right = None
  7. class Solution(object):
  8. def sumOfLeftLeaves(self, root):
  9. """
  10. :type root: TreeNode
  11. :rtype: int
  12. """
  13. ## 3rd try: iterative bfs
  14. if not root:
  15. return 0
  16. self.queue = [root]
  17. self.ans = 0
  18. while self.queue:
  19. n = self.queue.pop(0)
  20. if n.left:
  21. if n.left.left == None and n.left.right == None:
  22. self.ans += n.left.val
  23. else:
  24. self.queue.append(n.left)
  25. if n.right:
  26. self.queue.append(n.right)
  27. return self.ans
  28. ## 3.2: iterative dfs
  29. '''
  30. if not root:
  31. return 0
  32.  
  33. self.res = 0
  34. self.stack = [root]
  35. while self.stack:
  36. node = self.stack.pop()
  37.  
  38. if node.left:
  39. if node.left.left is None and node.left.right is None:
  40. self.res += node.left.val
  41. else:
  42. self.stack.append(node.left)
  43. if node.right:
  44. self.stack.append(node.right)
  45.  
  46. return self.res
  47. '''
  48. ## 2nd try with help from discussion: recursive on local variable
  49. '''
  50. if root == None:
  51. return 0
  52. ans = 0
  53. if root.left and root.left.left == None and root.left.right == None:
  54. ans = root.left.val
  55. return ans + self.sumOfLeftLeaves(root.left) + self.sumOfLeftLeaves(root.right)
  56. '''
  57. ## 1st try: recursive on global variable
  58. '''
  59. self.ans = 0
  60.  
  61. def dfs(root, isLeft):
  62. if root == None:
  63. return
  64. if not root.left and not root.right:
  65. if isLeft:
  66. self.ans += root.val
  67. return
  68. dfs(root.left, True)
  69. dfs(root.right, False)
  70.  
  71. dfs(root, False)
  72. return self.ans
  73. '''

没有理解题意

563. Binary Tree Tilt

AC版本:

  1. # Definition for a binary tree node.
  2. # class TreeNode(object):
  3. # def __init__(self, x):
  4. # self.val = x
  5. # self.left = None
  6. # self.right = None
  7. class Solution(object):
  8. count = 0
  9. def recursive(self, root):
  10. if root == None:
  11. return 0
  12. left = self.recursive(root.left)
  13. right = self.recursive(root.right)
  14. self.count += abs(left - right)
  15. return root.val + left + right
  16. def findTilt(self, root):
  17. """
  18. :type root: TreeNode
  19. :rtype: int
  20. """
  21. self.recursive(root)
  22. return self.count

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

  1. class Solution(object):
  2. def findTilt(self, root):
  3. """
  4. :type root: TreeNode
  5. :rtype: int
  6. """
  7. if not root:
  8. return 0
  9. (tree_tilt,s)=self.recurTilt(root)
  10. return tree_tilt
  11. def recurTilt(self,root):
  12. #return tree tilt, and tree nodes sum
  13. if not root:
  14. return 0,0
  15. (ltree_tilt,l_sum)=self.recurTilt(root.left)
  16. (rtree_tilt,r_sum)=self.recurTilt(root.right)
  17. node_tilt=abs(l_sum-r_sum)
  18. return (ltree_tilt+rtree_tilt+node_tilt,l_sum+r_sum+root.val)

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

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

  1. class Solution(object):
  2. count = 0
  3. def recursive(self, root):
  4. if root == None:
  5. return 0
  6. if root.left and root.right:
  7. self.count += abs(root.left.val - root.right.val)
  8. elif root.left:
  9. self.count += root.left.val
  10. elif root.right:
  11. self.count += root.right.val
  12. self.recursive(root.left)
  13. self.recursive(root.right)
  14. def findTilt(self, root):
  15. """
  16. :type root: TreeNode
  17. :rtype: int
  18. """
  19. if not root:
  20. return 0
  21. self.recursive(root)
  22. 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. flask 扩展之 -- flask-moment

    一. 安装 $ pip install flask-moment 二. 初始化 from flask_moment import Moment moment = Moment(app) 三. 解决依赖 ...

  2. javaScript的一些奇妙动画

         今天我给大家讲一下JavaScript中的显示隐藏.淡入淡出的效果 显示与隐藏动画效果 show()方法: show()方法会动态地改变当前元素的高度.宽度和不透明度,最终显示当前元素,此时 ...

  3. ASP.NET Core 源码学习之 Options[1]:Configure

    配置的本质就是字符串的键值对,但是对于面向对象语言来说,能使用强类型的配置是何等的爽哉! 目录 ASP.NET Core 配置系统 强类型的 Options Configure 方法 源码解析 ASP ...

  4. eclispe JavaEE 配置tomcat

    http://blog.csdn.net/hongshan50/article/details/8293526 http://blog.csdn.net/longshengguoji/article/ ...

  5. java中volatile不能保证线程安全

    今天打了打代码研究了一下java的volatile关键字到底能不能保证线程安全,经过实践,volatile是不能保证线程安全的,它只是保证了数据的可见性,不会再缓存,每个线程都是从主存中读到的数据,而 ...

  6. Reflect(反射)

    反射.反射,程序员的快乐.反射是无处不在的. 那么什么是反射:通过反射,可以在运行时获得程序或程序集中每一个类型(包括类.结构.委托.接口和枚举等)的成员和成员的信息.有了反射,即可对每一个类型了如指 ...

  7. 【Android Developers Training】 56. 更效率地加载大图片

    注:本文翻译自Google官方的Android Developers Training文档,译者技术一般,由于喜爱安卓而产生了翻译的念头,纯属个人兴趣爱好. 原文链接:http://developer ...

  8. Sublime text3插件安装方法

    一.安装sublime text3插件的方法: 1.Ctrl+~键,调出console,将下面代码复制到底部命令行,回车: import urllib.request,os; pf = 'Packag ...

  9. Ionic 2+ 安卓环境搭建

    安装 安卓studio https://developer.android.com/studio/index.html 设置一个环境变量 _JAVA_OPTIONS:-Xmx512M 添加androi ...

  10. Js作用域&作用域链

    js构建类 一 构建类的原则 构造函数 等于 原型的constructor //构造函数 function Hero(name,skill){ this.name = name; this.skill ...