每周完成一个 ARTS:
Algorithm: 每周至少做一个 LeetCode 的算法题
Review: 阅读并点评至少一篇英文技术文章
Tips: 学习至少一个技术技巧
Share: 分享一篇有观点和思考的技术文章
难度:Easy
题意:Given a binary tree and a sum, determine if the tree has a root-to-leaf path such that adding up all the values along the path equals the given sum.
注意:A leaf is a node with no children.
示例:Given the below binary tree and sum = 22
,
5
/ \
4 8
/ / \
11 13 4
/ \ \
7 2 1
return true, as there exist a root-to-leaf path 5->4->11->2 which sum is 22.
解法:
本题解法比较直接,首先要做的就是检查根节点是否存在,如果不存在那就直接返回 False
,之后递归检查,如果左右子节点都不存在,且 root.val==sum
,那么可以认为找到了这条路径,返回 True
,否则继续递归检查下一个子结点,这里传入下一个检查子节点的 sum
值应是 sum-root.val
,即表示减去当前节点的值。同时要注意的是,这里只需要检查是否存在符合条件的路径,所以左右两个子节点都要检查。
代码:
# 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 is None:
return False
if root.left is None and root.right is None and sum == root.val:
return True
else:
return self.hasPathSum(root.left, sum - root.val) or self.hasPathSum(root.right, sum - root.val)
本周阅读了 Medium 上一篇名为「The 2-Word Trick That Makes Small Talk Interesting」的文章。
文章讲的是如何让使用一个小技巧让你的 Small Talk 以更有趣、更轻松的方式进行下去。作者首先讲述了他在进行 Small Talk 时经常遇到的问题:在「保安三问」(你叫什么?你从哪里来?你干什么的?)之后,双方突然陷入沉寂,他发现他们两个没有太多的共同点,谈话进行不下去了,于是只好再去点一杯酒。但是对另外一些人,他们的谈话就非常有意思,谈话结束之后通常也会感觉更有能量与活力了。
作者接下来举了几个播客节目的例子,来说明他的观点:有两个词经常会被播客主持人使用,以穿过表面问题直指故事中心,那就是「I’m curious」。Guy Raz 在他的播客节目中对 Lyft 的 John Zimmer、Jeremy Stoppelman、Ross Bagdasarian Jr. 等人使用过这个技巧,而节目的效果通常是这些亿万富翁在 Guy Raz 的面前将他们脆弱的意面展现出来。一些其他的播客主播如 Joe Rogan,Tim Ferriss 或者 Cal Fussman 也经常使用「I’m curious」这类的词语,而这些节目的效果就像你是在听两个朋友之间的谈话。
最后作者将他使用这一技巧的结果展示了出来,并表示:
Curiosity is pure. If you believe every person has a great story, you will find that you are right. Sometimes a simple question is all it takes to reveal it.(好奇是纯粹的。如果你相信每个人都有伟大的故事,你会发现你是对的。很多时候一个简单的问题就能揭开这些伟大的故事的面纱。)
一些 Python 新手经常会写出这样的代码:
students = ['A', 'B', 'C', 'D']
index = 0
for name in students:
print(index, name)
index += 1
打印的结果为:
0 A
1 B
2 C
3 D
实际上,我们可以使用 enumerate()
函数来实现这一效果:
students = ['A', 'B', 'C', 'D']
for index, name in enumerate(students):
print(index, name)
打印出的结果也是一样的:
0 A
1 B
2 C
3 D
你甚至可以指定起始位置:
students = ['A', 'B', 'C', 'D']
for index, name in enumerate(students, start=1):
print(index, name)
打印的结果为:
1 A
2 B
3 C
4 D
另一种情况是,你有两个列表,你需要将这两个列表中的元素一一对应起来,然后打印:
names = ['Peter Parker', 'Bruce Wayne', 'Wild Wilson', 'Clark Kent']
heroes = ['Spiderman', 'Batman', 'Deadpool', 'Superman']
for index, name in enumerate(names):
hero = heroes[index]
print(f'{name} is acually {hero}')
打印的结果为:
Peter Parker is actually Spiderman
Bruce Wayne is actually Batman
Wild Wilson is actually Deadpool
Clark Kent is actually Superman
我们可以使用 zip()
函数来简化代码:
names = ['Peter Parker', 'Bruce Wayne', 'Wild Wilson', 'Clark Kent']
heroes = ['Spiderman', 'Batman', 'Deadpool', 'Superman']
for name, hero in zip(names, heroes):
print(f'{name} is acually {hero}')
打印的结果也还是:
Peter Parker is acturally Spiderman
Bruce Wayne is acturally Batman
Wild Wilson is acturally Deadpool
Clark Kent is acturally Superman
最近发现自己好像圆肩驼背比较严重,尤其是低头看手机的时间一长,脖子甚至会酸。于是我找来了 YouTube 健身大神 Jeremy Either 的修正头部位置的视频,简单总结如下。
由于现代人长时间的对着手机电脑,很容易就养成了头部姿势不正确的坏习惯,时间一长甚至会影响到脑部供血,形成颈椎病,于是J神推荐了以下几个日常也可以做的动作,用以矫正头部姿势: