一、Algorithm
1. 题目
给出一个 32 位的有符号整数,你需要将这个整数中每位上的数字进行反转。
示例:
1 // 示例 1: 2 输入: 123 3 输出: 321 4 5 // 示例 2: 6 输入: -123 7 输出: -321 8 9 // 示例 3: 10 输入: 120 11 输出: 21
注意:假设我们的环境只能存储得下 32 位的有符号整数,则其数值范围为 [−231, 231 − 1]。请根据这个假设,如果反转后整数溢出那么就返回 0。
2. 题解
整数反转的思路:
通过对 10 取余,可以获取当前最后一位数字。将结果变量乘以 10,再加上新获取的最后一位数字,即实现了反转。可以理解成把原数字的每一位倒着挤出来,送入新的结果变量。
INT_MAX & INT_MIN
首先,C/C++ 在 limits.h 中定义了常量 INT_MAX 和 INT_MIN,用于表示整型变量的最大值和最小值。
因为 int 类型变量占 4 字节(32 位),所以 INT_MAX = 231-1,INT_MIN= -231。C/C++ 中,所有超过该限值的整型数,都会出现溢出,导致 warning,但是并不会出现 error。如果想表示的整数超过了该限值,可以使用长整型 long long(8 字节)。
INT_MAX 和 INT_MIN 的运算如下:
-
-
INT_MAX + 1 = INT_MIN
-
INT_MIN - 1 = INT_MAX
-
abs(INT_MIN) = INT_MIN
-
INT_MAX + INT_MAX = -2
-
INT_MIN + INT_MIN = 0 。
-
换个角度理解,前三条运算性质如下:
-
-
INT_MAX + 1 < INT_MAX
-
INT_MIN - 1 > INT_MIN
- abs(INT_MIN) < 0
-
1 int reverse(int x){ 2 3 int result = 0; 4 5 while (x) 6 { 7 if (result > INT_MAX / 10 || result < INT_MIN / 10) 8 { 9 return 0; 10 } 11 12 result = result * 10 + x % 10; 13 14 x /= 10; 15 } 16 17 return result; 18 }
二、Review
本周阅读的文章为:《If You Want to Be a Senior Developer, Stop Focusing on Syntax》。
作者探讨了这样一个问题:初级开发者往往将注意力集中在学习、记忆某种编程语言和框架的语法细节。他们为此烦恼,甚至以开发过程中需要查阅文档为耻。
但对于有使用多种语言开发经历的高级开发者而言,他们并不认为需要记忆这些语法细节。很多大牛坦承,自己编程时也经常谷歌。甚至于,连招聘者都不是很在意这些细节。因为这些语法细节完全可以使用 IDE 解决。
对于高级开发者而言,即便是从未接触过的技术,也“不过是另一种工具”。他们并不需要先掌握这项新技术的全部细节再开始工作,而是用几个小时来阅读文档,建立基本的认识。此时开发工作就可以开始了,在开发过程中遇到问题,随用随学即可。
当下,技术的快速迭代使得我们有学不完的新知识——新的语言、新的框架,亦或原有语言或框架的大量更新。你几乎不可能掌握所有的细节,而且这样做的性价比太低了。
牛叉的工程师,应该更注重这两项能力:
- 对于新知识,如何在短时间内建立基本认知,快速上手。
- 在开发过程中遇到问题,如何善用搜索引擎,快速找到解决问题的方法。
在学习过程中也是如此,你不可能等到万事具备才启程。先掌握目前需要的知识,然后继续前行。遇到下一个问题时,再停下来寻求解决之道。这就好比开车出行,如果你想等到一路都是绿灯才动身,那你永远无法抵达。正确的方法是,先把眼前的绿灯开过去,遇到红灯就停下来,变成绿灯后再继续前行。
单词/词组
grocery n. 杂货店
beat yourself up 自责
intentionally adv. 有意地
sufficient adj. 充足的
三、Tips
https://www.cnblogs.com/murongmochen/p/12964618.html
四、Share
-
要融入一流的舞台和团队。视野、环境和舞台,对一个人的限制非常大。
-
做有价值的事。不要把自己的时间浪费在“写玩具代码”、“搬砖”、“用蛮力加班”的境地。所谓有价值,就是别人愿为此付高价的、高技术门槛的、有创造力的、颠覆性的。
-
不要封闭自己的技术栈,对于好的程序员来说,完全可以同时掌握几门语言和技术。偏见和不开放,对一个人的限制是真正有毁灭性的。主动让自己成为一个瞎子和聋子,主动把自己的能力阉割掉,这是一件令人痛心的事。谭嗣同说“把卷撑开海眼银”,要广泛地吸收新知识,而非将自己封闭起来。
-
要穷举各种方法来解决问题,而非寻找借口。要努力改变自己的问题和缺陷,而非放任自流。我们可能会受到各种外在因素的限制,譬如“我家在河北,所以不能去上海、深圳(好在还有个北京可选)”。譬如“我是学测控技术与仪器的,所以无法与计算机专业的同学竞争,不能做软件开发”。这些问题虽然客观存在,但并非无法可解。关键在于,我们发现问题后,是想方设法去解决它,还是以此为借口,封闭这个方向的所有可能。
-
要以开放的态度来拥抱新技能和新思维。英语对能否融入世界起到决定性的作用,不过关,就去练习。写代码的习惯不好,就去改变。你的视野决定了你是否知道要去哪,你的开放程度决定了你是否愿意为之改变。
-
要精于计算得失,学会取舍,抓主要矛盾。一般人算计短期内能得到什么,而优秀的人则是舍在今天,得在未来。整日纠结于低维度的问题(薪水不多、工作地点、是否能稳定到退休),会让人沦于平庸。要习惯从更高的维度来思考问题(譬如是否开阔了眼界、是否提升了竞争力、能否解决更难问题,创造更大价值)。
-
要勇于跳出传统的束缚。敢想敢拼的人,最差不过是没有成功,回到起点。连想都不敢想的人,只能缩在起点,做一只鹌鹑。
最后,以文中引用庄子的论述来作为结尾,并自我鞭策吧:
井蛙不可以语于海者,拘于虚也。(此为受到空间局限)
夏虫不可以语于冰者,笃于时也。(此为受到时间局限)
曲士不可以语于道者,束于教也。(此为受到认知局限)