ARTS Week 12
Jan 13, 2020 ~ Jan 19, 2020
Algorithm
Problem 112. Path Sum (路径总和) 题目链接
题目描述:给定一棵二叉树和一个值 sum ,检查二叉树是否存在根到叶子路径之和等与 sum 的路径,若存在,则返回 true,反之返回 false。例如,sum = 22,二叉树如下:
5
/ \
4 8
/ / \
11 13 4
/ \ \
7 2 1
返回结果 true,因为 5->4->11->2
思路为:树的遍历要使用递归,sum同时要保持更新,比如上面的例子中,使用了根节点后,sum = 22 - 5 = 17,需要对结点为空结点和叶子结点进行特殊处理。
通过的代码如下
# Definition for a binary tree node.
# class TreeNode:
# def __init__(self, x):
# self.val = x
# self.left = None
# self.right = None
class Solution:
def hasPathSum(self, root: TreeNode, sum: int) -> bool:
if root == None:
return False
elif root != None and root.left == None and root.right == None:
return (sum == root.val)
else:
return (self.hasPathSum(root.left, sum-root.val)) or (self.hasPathSum(root.right, sum-root.val))
Review
本周继续 Review 每个程序员需要知道的97件事(英文名:97 Things Every Programmer Should Know)。原文链接。下面是本周的5个小内容:
- 不要忽略错误(Don't Ignore that Error!) 原文链接
异常是一个很好的指示和处理错误的方式,但是很多代码中仅仅是捕捉到异常而不去处理异常,比如下面的代码
try {
// ...do something...
}
catch (...) {} // ignore errors
忽略错误可能会导致一些严重的后果:比如产生难以发现的错误,利用错误来侵入、破坏软件。因此,我们需要对错误进行处理,而不是忽略它。
- 不要仅仅学习语言,而要了解其文化(Don't Just Learn the Language, Understand its Culture) 原文链接
编程语言有许多,它们都有着独特的特点和适用的条件。单单学习语言可能会无法理解某一些语言,尤其是一些差别比较大的语言时。比如一直学习并使用 Java,然后去学习 Haskell 时,可能会对函数式编程产生疑惑,此时应该去了解下函数式编程的文化,比如产生的背景,原因,目的,生态等。 - 不要将程序钉在直立位置(Don't Nail Your Program into the Upright Position) 原文链接
应该尽可能是的使用异常来妥善处理错误,而不是直接将错误抛给用户。就好比 UI 设计中有一条规则,永远不要让用户看到错误报告,而是好像解决了问题。因为直接弹出的错误会给用户带来不好印象,同时大部分用户即使知道了错误原因也并知道如何改正它。 - 不要依赖“魔术发生”(Don't Reply on "Magic Happens Here") 原文链接
很多情况下,即使你不了解具体情况,程序仍可以正常运行,我们称其为“魔法”。比如,程序有内存泄漏的错误,但是每次泄漏的内存都很少,也许程序一直运行十几个甚至几十个小时也不会出现问题,但是终有一刻内存被耗尽了,问题出现了。 - 不要重复自己(Don't Repeat Yourself) 原文链接
不要重复自己(DRY)是所有编程中最基本的原则之一,其中包含三个子观点。1)复制是浪费:每一行代码都必须得到维护,不必要的复制会使代码库膨胀,同时给系统增加了不必要的复杂性。2)流程重复要求自动化:开发过程中有不少过程是重复的,比如测试,如果手动完成则需要增加许多不必要的劳动。3)逻辑重复要求抽象:逻辑重复可以用复制粘贴 if-else 或者switch-case 来进行检测,更好的方式是利用设计模式来避免,比如工厂方法。
Tips
Python 中字符与 ASCII 码值的转换:ord()函数是将字符转换为 ASCII 码值,chr()函数是将 ASCII 码值转换为字符,举例如下:
print("ord('H') = ",ord('H')) # ord('H') = 72
print("chr(77) = ",chr(77)) # chr(77) = M
Sharing
在 Review 部分中提到的不要将程序钉在直立位置(Don't Nail Your Program into the Upright Position),我认为是一个很取巧的办法,这样做有好有坏,不管是仅仅报告出现错误,还是具体的错误原因。我觉得对用户的影响是一样的,好的办法是报告一个简略的错误,不想具体了解的用户进需要知道发生错误即可,想具体了解错误的用户可以查看详细错误。
ARTS Week 12的更多相关文章
- python 各模块
01 关于本书 02 代码约定 03 关于例子 04 如何联系我们 1 核心模块 11 介绍 111 内建函数和异常 112 操作系统接口模块 113 类型支持模块 114 正则表达式 115 语言支 ...
- Python Standard Library
Python Standard Library "We'd like to pretend that 'Fredrik' is a role, but even hundreds of vo ...
- 在mybatis中写sql语句的一些体会
本文会使用一个案例,就mybatis的一些基础语法进行讲解.案例中使用到的数据库表和对象如下: article表:这个表存放的是文章的基础信息 -- ------------------------- ...
- ARTS 12.10 - 12.14
从陈皓博主的专栏里学到一个概念,争取可以坚持下去: 我在我的读者群中推荐出 ARTS 的任务,每个人每周一个 Algorithm,Review 一篇英文文章,总结一个工作中的技术 Tip,以及 Sha ...
- ARTS 12.31 - 1.4
Algorithm 这是一道需要用动态规划的问题.求字符串的最长回文子序列. 复习了一遍动态规划,重点是要分析出最优解所包含的子问题的最优解,把过程描述为数学公式. 题目https://leetcod ...
- ARTS 12.24 - 12.28
从陈皓博主的专栏里学到一个概念,争取可以坚持下去: 每周一个 Algorithm,Review 一篇英文文章,总结一个工作中的技术 Tip,以及 Share 一个传递价值观的东西! 一个 Algori ...
- arts 打卡12周
一 算法: 字符串转换整数 (atoi) 请你来实现一个 atoi 函数,使其能将字符串转换成整数. 首先,该函数会根据需要丢弃无用的开头空格字符,直到寻找到第一个非空格的字符为止. 当我们寻找 ...
- 【ARTS】01_07_左耳听风-20181224~1230
ARTS: Algrothm: leetcode算法题目 Review: 阅读并且点评一篇英文技术文章 Tip/Techni: 学习一个技术技巧 Share: 分享一篇有观点和思考的技术文章 Algo ...
- 【ARTS】01_05_左耳听风-20181210~1216
ARTS: Algrothm: leetcode算法题目 Review: 阅读并且点评一篇英文技术文章 Tip/Techni: 学习一个技术技巧 Share: 分享一篇有观点和思考的技术文章 Algo ...
随机推荐
- Linux下安装oracle遇到启动监听服务器启动失败
1.发现监听服务器没有启动,则 lsntctl start 启动监听服务器: 2.发现TNS-12555问题: 3.查找TNS-12555错误,找到一个满意的答案: chmod 777 /var/ ...
- PHP计算每月几周,每周的开始结束日期
PHP计算每月几周,每周的开始结束日期 因为项目中需要一个每周工作计算的功能,具体日期的算法是,把每月拆分成几个周,最后一个星期这个月份的天数不够就补上下个月的. 列如今天8月27星期一,这个月有31 ...
- Scala与Mongodb实践3-----运算环境的搭建
目的:使的在IDEA中编辑代码,令代码实现mongodb运算,且转换较为便捷 由实验2可知,运算环境的搭建亦需要对数据进行存储和计算,故需要实现类型转换,所以在实验2的基础上搭建环境. 由菜鸟教程可得 ...
- Maven 基础(一) | 使用 Maven 的正确姿势
一.什么是 Maven? Maven 是一个项目管理工具,它的本质是一个项目对象模型(POM),体现在配置中就是我们常见的 pom.xml 文件,而这个 pom 文件就是 Maven 的核心,它管理了 ...
- 使用Merkle树检测数据不一致(翻译)
背景 Cassandra的逆熵功能使用Merkle树来检测副本之间的数据不一致. 定义 Merkle树是一种哈希树,其中的叶子包含各个数据块的哈希值,父节点包含其各自的子节点的哈希值.它提供了一种有效 ...
- SpringBoot + Apache Shiro权限管理
之前配置过Spring + SpringMVC + JPA + Shiro后台权限管理 + VUE前台登录页面的框架,手动配置各种.xml,比较繁琐,前几天写了个SpringBootShiro的Dem ...
- OpenGLES思维导图
两本书到头来就只剩下了这三张图了吧.想要原图:https://github.com/wangwangla/biji/blob/master/%E8%AF%BB%E4%B9%A6%E7%AC%94%E8 ...
- 类选择器练习:Google 案例
<!DOCTYPE html> <html lang="en"> <head> <meta charset="utf-8&quo ...
- django.db.migrations.exceptions.MigrationSchemaMissing和raise ImproperlyConfigured('mysqlclient 1.3.13 or newer is required; you have %s.' % Database.__version__)
1.使用Python3.7 + Django2.2 + MySQL 5.5 在执行(python manage.py migrate)命令时出现错误django.db.migrations.excep ...
- FreeRTOS独立看门狗检测任务执行状态
为了保证FreeRTOS的所有用户任务都在正常的运行,我们通过独立看门狗的形式来检测,一旦发现有某个任务长时间没有执行,看门狗就会将系统复位. 运行条件: 创建5个用户任务Task1,Task2,Ta ...