LintCode - 反转整数(普通)

版权声明:本文为博主原创文章,未经博主允许不得转载。

难度:容易
要求:

将一个整数中的数字进行颠倒,当颠倒后的整数溢出时,返回 0 (标记为 32 位整数)。

样例

给定 x = 123,返回 321
给定 x = -123,返回 -321

思路
通过对数字模十取余得到它的最低位。其实本题考查的是整数相加的溢出处理,检查溢出有这么几种办法:

  • 两个正数数相加得到负数,或者两个负数相加得到正数,但某些编译器溢出优化的方式不一样
  • 对于正数,如果最大整数减去一个数小于另一个数,或者对于负数,最小整数减去一个数大于另一个数,则溢出。这是用减法来避免加法的溢出。
  • 使用long来保存可能溢出的结果,再与最大/最小整数相比较
    /**
     * @param n the integer to be reversed
     * @return the reversed integer
     */
    public int reverseInteger(int x) {
        long result = 0;
        int tmp = Math.abs(x);
        while (tmp > 0) {
            result *= 10;
            result += tmp % 10;
            if (result > Integer.MAX_VALUE) {
                return 0;
            }
            tmp /= 10;
        }
        return (int) (x >= 0 ? result : -result);
    }

思路
先将数字转化为字符串,然后将字符串倒序输出,并转回数字。记得需要去除首部多余的0。

你可能感兴趣的:(LintCode - 反转整数(普通))