ARTS 第 34 周

每周完成一个 ARTS:
Algorithm: 每周至少做一个 LeetCode 的算法题
Review: 阅读并点评至少一篇英文技术文章
Tips: 学习至少一个技术技巧
Share: 分享一篇有观点和思考的技术文章


Contents


Algorithm

112. Path Sum

题目:112. Path Sum

难度: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)

Review

The 2-Word Trick That Makes Small Talk Interesting

本周阅读了 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.(好奇是纯粹的。如果你相信每个人都有伟大的故事,你会发现你是对的。很多时候一个简单的问题就能揭开这些伟大的故事的面纱。)


Tips

enumerate 与 zip

一些 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

Share

拯救驼背的几个日常拉伸动作

最近发现自己好像圆肩驼背比较严重,尤其是低头看手机的时间一长,脖子甚至会酸。于是我找来了 YouTube 健身大神 Jeremy Either 的修正头部位置的视频,简单总结如下。

由于现代人长时间的对着手机电脑,很容易就养成了头部姿势不正确的坏习惯,时间一长甚至会影响到脑部供血,形成颈椎病,于是J神推荐了以下几个日常也可以做的动作,用以矫正头部姿势: