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 ...
随机推荐
- AVR单片机教程——ADC
ADC 计算机的世界是0和1的.单片机可以通过读取0和1来确定按键状态,也可以输出0和1来控制LED.即使是看起来不太0和1的PWM,好像可以输出0到5V之间的电压一样,达到0和1之间的效果,但本质上 ...
- Redhat6 RPM 软件管理常用命令汇总
软件的安装时操作系统管理的基础,与Windows不同,Linux的软件管理有很多种方式,Redhat的最常用的是RPM方式,安装集成在光盘中的RPM包.这种方式比Windows平台的软件管理更加便捷( ...
- Spring--2.Spring之IOC--了解IOC容器
IOC(容器),用来集成别的框架 1.IOC(Inversion(反转)Of Control):控制反转 控制:资源的获取方式: 主动式: BookServlet{ BookService bs=ne ...
- python命名空间(namespace)
命名空间: 每一个作用域变量存储的位置,或者解释为 存储作用域中变量的字典. 作用: 获取想查看某个作用域中的变量名.变量值. 使用方法: locals() #当前命名空间 1. 效果图: 2. 代 ...
- springboot +fastdfs 上传文件到到云服务器
fastdfs在云服务器的搭建和配置:https://blog.csdn.net/qq_41592652/article/details/104006289 springboot结构如下: appli ...
- NTT - 牛客
链接:https://www.nowcoder.com/acm/contest/133/D来源:牛客网 题目描述 Applese打开了m个QQ群,向群友们发出了组队的邀请.作为网红选手,Applese ...
- 树上主席树 - 查询树链上第K大
Description 给定一棵N个节点的树,每个点有一个权值,对于M个询问(u,v,k),你需要回答u xor lastans和v这两个节点间第K小的点权.其中lastans是上一个询问的答案,初始 ...
- 第五篇:python购物车小程序开发demo
功能:自定义工资水平,可选商品加购余额实时提醒用到的知识点:列表.if多分支.循环.高亮输出未解决bug删除商品后不能自动退出 代码如下: if shopping_list: shopping_lis ...
- Java电商支付系统实战(一)- 简介
现如今,支付成为热点 对于电商业务,这都是不可或缺的 核心功能剖析 下单->支付 nginx 将用户请求反向代理到我们编写的电商系统 = 下单 之后,点击支付跳转到支付系统,最后对接 通过跳转将 ...
- StampedLock的理解和使用
StampedLock介绍 StampedLock是为了优化可重入读写锁性能的一个锁实现工具,jdk8开始引入 相比于普通的ReentranReadWriteLock主要多了一种乐观读的功能 在API ...