1. Algorithm
题目: Add Two Numbers
You are given two non-empty linked lists representing two non-negative integers. The digits are stored in reverse order and each of their nodes contain a single digit. Add the two numbers and return it as a linked list.
You may assume the two numbers do not contain any leading zero, except the number 0 itself.
Example:
Input: (2 -> 4 -> 3) + (5 -> 6 -> 4)
Output: 7 -> 0 -> 8
Explanation: 342 + 465 = 807.
Solution
时间复杂度: O(n)
空间复杂度: O(1)
# Definition for singly-linked list.
# class ListNode:
# def __init__(self, x):
# self.val = x
# self.next = None
class Solution:
def addTwoNumbers(self, l1: ListNode, l2: ListNode) -> ListNode:
dummy = ListNode(0)
current, carry = dummy, 0
while l1 or l2:
val = carry
if l1:
val += l1.val
l1 = l1.next
if l2:
val += l2.val
l2 = l2.next
carry = val // 10
current.next = ListNode(val % 10)
current = current.next
if carry == 1:
current.next = ListNode(carry)
return dummy.next
2. Review:
A Smart Programmer Understands The Problems Worth Fixing
这篇文章讲的主题就像题目所说的: 一个聪明的程序员应该懂得什么样的问题才值得去解决。聪明的程序员不是那种可以解决所有问题的程序员,而是那种懂得什么样的问题值得去解决的程序员。程序员需要明白他能够带来的价值,当碰到问题的时候要学会权衡,这个问题值不值得去花费时间和精力去解决,要找到那个tradeoff,要去思考投入产出,而不要天真地认为所有的问题都要解决,只要碰到问题就要去解决。
3. Tip:
Treemacs
treemacs是emacs的一个文件浏览工具,之前一直用的是neotree,但是neotree的功能比较单一,treemacs提供了一个非常实用的功能: 工作区,创建一些自己比较常用的工作区,这样的话,在不同的个工作区之间切换会非常高效。唯一有一点不足的是,不能实时同步org文件的大纲,如果能实时同步的话就更爽了。
4. Share:
这周读了《逆商》这本书,不过还没读完,只看了前面部分的理论基础,后面的方法论部分还没开始看,就分享一下看过的内容以及自己的一些看法吧。
我们每个人都会遭遇痛苦、困境和挫折等等我们所谓的逆境。这本书根据人们面对逆境的不同应对模式,把人分为了三类人: 放弃者、扎营者和攀登者。放弃者是那些害怕面对痛苦、失败和挫折的人们,总是逃避问题,不愿去解决问题,不管改变现状,他们最终只会面临更大的痛苦和失败;扎营者是刚开始也是攀登者,他们在一开始会迎接痛苦和挑战,但是他们在取得一定进展的时候,就会选择止步不前,会转向守护已有的,停止成长;而攀登者是始终都在积极面对痛苦和挫折,他们的结果会越来越好,他们相信一定会得到自己想要的。
我们每个人都会遭遇各种逆境,不管是在社会中、职场中还是在个人的其他方面。即使是我们学习一个技能也是如此,有的人根本就不愿意去学习和成长,他们害怕将要面对的痛苦和挫折,有的人在开始的时候会愿意付出和努力,积极面对痛苦和失败,但是在中途就会放弃,就会止步不前,只有少数的人会坚持下去,会去积极地面对各种挫折,会去解决各种问题,直到实现了自己的目标。
其实我们越是害怕什么,越会得到什么,我们越是害怕失败和痛苦,就会经历更多的失败和痛苦,我们的结果往往会更不好,我们只有去直面恐惧、痛苦和失败,去跨越一道又一道的坎,我们的路才会越来越宽,过去的痛苦对我们来说已不算什么,我们有能力去面对和跨越更大的挑战。所以面对恐惧、痛苦和失败最好的策略不是逃避,而是直面直到超越它们。