每周完成一个 ARTS:
Algorithm: 每周至少做一个 LeetCode 的算法题
Review: 阅读并点评至少一篇英文技术文章
Tips: 学习至少一个技术技巧
Share: 分享一篇有观点和思考的技术文章
难度:Easy
题意:Given an integer (signed 32 bits), write a function to check whether it is a power of 4.
示例一:
Input: 16
Output: true
示例二:
Input: 5
Output: false
Follow up: Could you solve it without loops/recursion?
解法一:
这道题其实和第 326 题:Power of Three非常像,解题思路也一样,但为什么还要做一遍呢?一个是为了保持手感,在遇到类似的简单题目的时候不至于出错;第二个原因就是题目中有个 Follow up,就是让你不用循环或者递归,来解这道题。
首先给出最直接的解题思路,就是一直对 4 取余,如果除不尽,那么肯定就不是 4 的幂,如果除尽了,看最后剩下的结果是不是 1,如果是 1,那么说明 num 是 4 的幂,否则不是。
代码:
class Solution:
def isPowerOfFour(self, num: int) -> bool:
while num >= 4:
if num % 4 == 0:
num /= 4
else:
return False
return True if num == 1 else False
这种接法最为简单直接,时间复杂度 O(log N),空间复杂度 O(1)。
解法二:
上次 Power of Three 的解法,只要能整除 3 的 39 次方的数就一定是 3 的幂,那么这次是不是只要换成 4 的 39 次方就行了呢?实际上这次并不管用,一个非常简单的例子就是 2,2 能够整除所有的偶数,所以能整除 4^39 的数 2 也算一个,但 2 并不是 4 的幂,同样的还有 8、32,其实就是那些「是 2 的幂,但不是 4 的幂的数」也能满足这个条件,所以这种接法这次并不能适用。
在评论区我看到了一种非常清奇的思路,用 bin()
函数。。。下面放上一个给大家看看:
The idea is to go into the binary form of the number.
If it’s a 1 following by even number of zeros, then it’s a power of four.
e.g.bin(4**0)
Out[27]: ‘0b1’bin(4**1)
Out[28]: ‘0b100’bin(4**2)
Out[29]: ‘0b10000’bin(4**3)
Out[30]: ‘0b1000000’Codes:
class Solution(object):
def isPowerOfFour(self, num):
"""
:type num: int
:rtype: bool
"""
return bin(num)[3:] == len(bin(num)[3:])*'0' and len(bin(num)[3:])%2==0 if num!=0 else False
也就是经过 bin()
函数转为二进制表示之后,如果从第三(四)位开始到最后,每一位都是 0,而且一共有偶数个 0 的话,那么这个数就是 4 的幂。
同样的道理也可以应用到 2 的幂上,去掉「偶数个 0」的条件即可。
本周阅读的是 Medium 上的一年关于个人成长的文章,《One Habit That Changed My Life》。作者这这篇文章中对当今网络世界中充斥的各种对生活、饮食、自我提升等无处不在的建议进行了批判,并且给出了他本人坚持的一个简单的习惯:Question everything——也就是,对你接收到的任何建议都保持质疑的习惯。这样,你才会一直处在一个上升、上进的状态。
本文语言通俗,可以看出作者是个靠写作为生的人。也许很多来自于网络世界和你周围的人的建议都很有用,但保持质疑,才真正能提升你的那些「不容易被时间影响的能力」:沟通能力、同理心、系统思维和逻辑能力。
我可能找到了(适合我的)微信排版的终极武器。
似乎是因为我在这个基于 wechat-formator 的微信编辑器的 GitHub 上提了一个寻求 LaTeX 支持的 Issue,一位叫做 arron 的小哥(?)给我发了封邮件,推荐我使用另一个支持微信的 Markdown 编辑器——mdnice。地址在这里:https://mdnice.com/。
我仔细看了看,除了支持常见的 Markdown 语法和自定义 CSS 外,mdnice 还支持图片自动上传微信服务器、表格、LaTeX 和横屏滑动幻灯片!这些就很棒了,待我仔细使用一段时间,再来向大家汇报!
上次更新还是过年在家(还是在家好呀),那会儿还没有要禁足的命令,于是该吃吃该喝喝该出去约朋友出去约朋友,后来在家过年不出门,也就顺便给自己放了个假,陪爸妈打打扑克聊聊天,给他们解决一下电脑问题(Windows 真 lj 😂),于是断更了一周。
接着假期余额不足,登上了回法国的飞机。(落地出机场甚至连发传单和量体温的人都没有,这非常的法国。)虽然出海关的时候非常 tranquille(法语「很 easy 啦」的意思),但还是一到家就被公司要求隔离了,在家办公,只是我花了两天时间搬了家,暂时没有书桌,还有些倒时差,就又断更了一周。下周开始要重新进入工作状态啦,远程工作还是非常考验自制力的。
回家的几天,我除了和朋友们打打游戏,还看了吴军老师的《全球科技通史》与 著名统计学家 C.R. Rao 的《统计与真理——如何运用偶然性》。
前者,从远古的石制刀具、水稻的驯化和陶器的产生,到工业革命、蒸汽机、电的产生和应用,再到信息技术、核聚变、基因编辑和量子通信,吴军老师为我们绘制了整个人类文明史的一幅鸟瞰图,阅读的过程中,我能感受到人类这个物种从挣扎着生存、适应环境,到改善生活、改变环境的变化过程,科技的力量贯穿始终。
后者揭示了统计学的基本原理,除了讲述统计学的原理和历史之外,作者还强调了「从数字中学习有助于成为有效率的人」这一观点。这本书涵盖了大量的统计学知识,却十分巧妙地点到为止,通过具体的实例对经典的统计学概念进行阐述,而不是刻板的专业术语和晦涩艰深的公式,这让这本书成为我今年推荐的 No.1。
最后送给大家一句话,算是共勉吧:
尽量避免自己被那些宏大而虚无的东西而打动,那些大都是想象的共同体,尽量去关注那些小的独立的个体和鲜活的生命吧。