ARTS打卡第二周

Algorithm:

Leetcode: 7. Reverse Integer
Review:
Artical:How to be a great programmer
Words and phrases:
Tips:
Share:
Algorithm:
Leetcode: 7. Reverse Integer
Given a 32-bit signed integer, reverse digits of an integer.
Example 1:
Input: 123
Output: 321

Example 2:
Input: -123
Output: -321

Example 3:
Input: 120
Output: 21

Note:
Assume we are dealing with an environment which could only store integers within the 32-bit signed integer range: [−231, 231 − 1]. For the purpose of this problem, assume that your function returns 0 when the reversed integer overflows.

思路:
逐位反转,很容易想到整除和求余运算。此题考查的重点应该是越界检查。我一开始没想到该怎么做越界检查,看了官方题解才有了思路。想通过判断 y10 + x1%10 的结果是否大于 Integer.MAX_VALUE 是不可行的,因为运算结果已经越界了,无法判断了。换个思路,我不知道 y10 + x1%10 的结果是否越界,但我知道 y和x1满足什么条件时是不越界的,因为边界我已经知道了,用边界来反推y和x1的合法值,就好办了。
首先,如果y已经大于Integer.MAX_VALUE/10了,那么无论加不加x1%10,都肯定越界了;
其次,如果y等于Integer.MAX_VALUE/10,那么当Integer.MAX_VALUE不能整除10时,那么y*10是小于Integer.MAX_VALUE的,此时就要比较x1%10和Integer.MAX_VALUE%10的大小了;
最后,因为负数的范围比正数大1,上述越界检查都针对的是正数,在正数范围内不越界的话,转换成负数也不越界,特殊情况就是负数比正数多出来的那一个数 -2^31,当x是这个数值时,肯定越界了,直接返回。

class Solution {
    /**
     此题边界检查是考察重点
     **/
    public int reverse(int x) {
        if(x == Integer.MIN_VALUE) return 0;
        
        int x1 = Math.abs(x);
        int y = 0;

        do {
            if(y > Integer.MAX_VALUE/10) return 0;
            if(y == Integer.MAX_VALUE/10 && x1%10 > Integer.MAX_VALUE%10) return 0;

            y = y * 10 + x1%10;
            x1 = x1/10;
        } while(x1 > 0);

        return y = x < 0 ? (-1*y) : y;
    }
}

Review:

Artical:How to be a great programmer
这篇文章描述了伟大程序员都有一个共性,就是:具备扎实的基础。这使得他们能够做出伟大的事情和产生突破性想法。就像金字塔一样,地基非常巨大,但越往上越细,最终在某一点达到最高处。
所谓的“基础”到底是什么呢?作者根据自己的经验和调研结果,提出了两点见解:
锻炼解决问题的能力
分析问题的本质(入木三分)
确定整体目标(有宏观意识)
带着明确的目的去解决问题(有的放矢)
3.1 把问题化繁为简,化大为小(分治法)
3.2 借助图形直观表达(所见即所得)
知易行难,作者结合自己的实践给出了一些具备可操作性的建议:
首先要理解问题。比如遇到一个难题,先搞清楚
我尝试解决的是什么问题,或者我尝试寻找什么?(unknown)
已知条件是什么?(data)
有哪些限制?(condition)
其次要制定计划。比如可以按照顺序列出先做什么再做什么;也可以画出草图。
训练成为一个解决问题的能手需要花费很多时间,但是这是值得的。
当我们阅读一些“大师”的代码时,我们会发现很容易读懂,变量都有恰当的名字,函数简洁明了,每一行代码都有明确的意图,没有多余的东西。代码清晰阐述了作者的思考过程。这就是解决问题强的人表现出来的特点。
了解计算机科学
了解计算机的工作原理,能帮助我们更好的理解自己所写的代码。通常,打基础是一件枯燥、见效慢的工作,如果有选择的话,人们通常会选择更有意思的事情来做。但是,基础打得牢,写代码会更有自信,因为我们会更清楚“如何做”和“为什么这么做”。这样会提升我们的工作质量,使我们变得更加值得信任。

另外,基础掌握得好,能帮助我们更快更好地学习其他技术。俗话说得好,“磨刀不误砍柴工”,打好基础,会事半功倍。

Words and phrases:
breakthrough:突破
Extraordinaire:非凡
stand out to me:脱颖而出
distill:揭露
essence:本质
On more than one occasion:不止一次
get stuck:止步不前
credibility:可靠性,可信性

Tips:

vim快捷键:
全选:ggVG
全选删除:ggVGd
全选复制到剪贴板:ggVG+y

Share:

对自律上瘾后,人生开挂了
一篇讲述自律的文章。我们大多数都是普通人,不是天才,也不是笨蛋,要想成功,就需要不断地付出努力。上学的时候,虽然还不太清楚理想是什么,但是有学校的规矩和家长的期望约束着我们,即使为了学习而学习,我们也还是有动力的。工作以后,缺少了来自外界的督促,我们往往容易陷入一个舒适区,即我老老实实干,手头的工作似乎也能应付,每个月到手工资虽然不多,但也基本够花。这样的日子过得飞快。一旦我们再次面临外界的压力(裁员、缺钱、不受重视等等),就会发现自己是多么容易被替代。自律,就是要求我们不要停止学习,而且不要局限于现在,要放眼未来,塑造自己的核心竞争力。所谓核心竞争力,就是自己有,别人没有的东西,只有拥有核心竞争力,才不会轻易被替代。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值