Code Ganker: Reverse Integer -- LeetCode

2014年2月16日星期日

Reverse Integer -- LeetCode

原题链接: http://oj.leetcode.com/problems/reverse-integer/
这道题思路非常简单,就是按照数字位反转过来就可以,基本数字操作。但是这种题的考察重点并不在于问题本身,越是简单的题目越要注意细节,一般来说整数的处理问题要注意的有两点,一点是符号,另一点是整数越界问题。代码如下:
public int reverse(int x) {
    if(x==Integer.MIN_VALUE)
        return 0;
    int num = Math.abs(x);
    int res = 0;
    while(num!=0)
    {
        if(res>(Integer.MAX_VALUE-num%10)/10)
            return 0;
        res = res*10+num%10;
        num /= 10;
    }
    return x>0?res:-res;
}
上面的代码为了后面方便处理,先将数字转为正数。注意Integer.MIN_VALUE的绝对值是比Integer.MAX_VALUE大1的,所以经常要单独处理。如果不先转为正数也可以,只是在后面要对符号进行一下判断。这种题目考察的就是数字的基本处理,面试的时候尽量不能错,而且对于corner case要尽量进行考虑,一般来说都是面试的第一道门槛。

4 条评论:

  1. 有点不太明白res>(Integer.MAX_VALUE-num%10)/10, 如果是判断最后返回的值是否越界的话,为什么还要减去num%10。 num%10总归是0~9,Integer.MAX_VALUE减去0~9再除以10不还是Integer.MAX_VALUE/10?返回INT,不是忽略小数点了嘛

    回复删除
    回复
    1. 其实是不一样的,Integer.MAX_VALUE的尾数是7,如果是8和9的话,那么(Integer.MAX_VALUE-num%10)/10和Integer.MAX_VALUE/10的值就不同。这里就是要看res*10+num%10是不是大于Integer.MAX_VALUE,按照不等式倒过去就可以了。

      删除
  2. leetcode 改了题目,如果overflow 返回0。。。

    回复删除