LeetCode - 7 - Reverse Integer

题目

URL:https://leetcode.com/problems/reverse-integer

 

 

解法

这个题目是极其简单的,对于数 x,每次对 10 取余保存为结果,之后 x 除以 10,若 x 不为0,则结果乘 10,继续取余。不过,注意一些会产生异常的条件:

  •  溢出,包括正数溢出、负数溢出;
  •  以0结尾的数字。

有一点比较坑爹,Leetcode 并没有说异常情况的返回值,本题返回值为0。

    public int reverse(int x) {
        long result = 0;
        while (x != 0) {
            result = result * 10 + x % 10;
            x = x / 10;
            if (result > Integer.MAX_VALUE || result < Integer.MIN_VALUE) return 0;
        }
        return (int) result;
    }

取余法,时间复杂度O(x.length),运行时间约为 36 ms

 

总结

注意细节。

还有可能相对于乘除法而言,条件判断的代价很小。将 if 语句挪出循环体外,时间立马增加 20 ms,由原来时间领先 99% 算法变为领先 20% 算法。

 

posted @ 2017-07-11 23:01  Piers  阅读(134)  评论(0编辑  收藏  举报