每周完成一个 ARTS:
Algorithm: 每周至少做一个 LeetCode 的算法题
Review: 阅读并点评至少一篇英文技术文章
Tips: 学习至少一个技术技巧
Share: 分享一篇有观点和思考的技术文章
_
来使大数字更易读以及「f-string」难度:Easy
题意:Given two binary strings, return their sum (also a binary string). The input strings are both non-empty and contains only characters 1
or 0
.
示例 1:
Input: a = "11", b = "1"
Output: "100"
示例 2:
Input: a = "1010", b = "1011"
Output: "10101"
解法:
本题解法很直接,因为我们直觉上二进制加法是从右往左相加的,所以这个题目也要从右往左去读取需要相加的两个数,而且我们需要取两者之中更长的字符串。首先我们定义几个变量:result
表示最后的结果,value
表示当前位置相加的结果,carry
表示进位位,在每次相加结束后,需要计算进位位和当前位,然后将当前位加到 result
的前面。最后考虑是否需要再添加一个进位位。
代码:
class Solution:
def addBinary(self, a: str, b: str) -> str:
result, value, carry = '', 0, 0
for i in range(max(len(a), len(b))):
value = carry
if i < len(a):
value += int(a[-(i+1)])
if i < len(b):
value += int(b[-(i+1)])
carry = value // 2
value = value % 2
result = str(value) + result
if carry:
result = str(carry) + result
return result
本周阅读了 Medium 上的一篇讲述幸存者偏差的文章。文章从最基础的解释什么是「偏差」—— bias 开始,通过讲述二战时期飞机的幸存者的故事,引入了「幸存者偏差」这一概念,再通过几个生活中更为常见的例子让读者更加深了理解。之后举了一个「是否要提拔高中校长」的例子。最后讲述了在数据科学、机器学习和人工智能中非常容易由于「幸存者偏差」导致严重后果的三个应用场景。
文章语言不难,大概十分钟就可以读完,但是与读者的互动比较多,能帮助读者更容易地理解什么是「幸存者偏差」。
Corey Schafer,一位技术类 YouTuber,专注于分享各类技术教程。他的教程循序渐进,结构清晰,出了很多针对初学者的教学视频。我从他的视频中受益良多。B站有搬运资源,但似乎没有中文字幕。
_
来使大数字更易读以及「f-string」有时候我们会遇到一些很长的数字,想知道这些数字的具体大小,比如下面这样:
a = 1000000000
b = 10000000
total = a + b
print(total)
我可能会一位一位去数 a
和 b
的大小,数出来 a
是十亿,b
是一千万。这里有一个小窍门是,可以使用「下划线」_
在每一个千位将大数区分开,这样使数字更易读:
a = 1_000_000_000
b = 10_000_000
total = a + b
print(total)
同时为了使结果也更易读,我们可以使用 Python 3.6 引入的「f-string」:
print(f'{total:,}')
这将会输出如下结果:
>>> a = 1_000_000_000
>>> b = 10_000_000
>>> total = a + b
>>> print(total)
1010000000
>>> print(f'{total:,}')
1,010,000,000
关于更多有关「f-string」的用法,可以查看这个链接。