413. 反转整数

题目

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

样例
给定 x = 123,返回 321

给定 x = -123,返回 -321

分析

每次模10,就能得到末尾,然后除10,就能逐位取到x的数字;将取得的数字乘以10,不断累加,就能得到逆序的数字。

  • 负数可以记下符号位,然后当成正数处理,最后还原符号位
  • 如果颠倒后溢出,直接返回0,如何判断溢出?只要累计的值超过Integer.MAX_VALUE,就溢出了,可以用long类型存储计算结果

代码


public class Solution {
    /**
     * @param n: the integer to be reversed
     * @return: the reversed integer
     */
    public int reverseInteger(int n) {
        // write your code here
        long r = 0;
        int f = 1;
        if (n < 0) {
            f = -1;
            n = -n;
        }
        while(n != 0) {
            int b = n % 10;
            r = r * 10 + b;
            if (r > Integer.MAX_VALUE) {
                return 0;
            }
            n = n / 10;
        }
        
        return (int)r * f;
    }
}
Show Comments

Get the latest posts delivered right to your inbox.