每日一题

整数反转

给你一个 32 位的有符号整数 x ,返回将 x 中的数字部分反转后的结果。

如果反转后整数超过 32 位的有符号整数的范围 [−231,  231 − 1] ,就返回 0。

假设环境不允许存储 64 位整数(有符号或无符号),也就是不能说定义long类型。

示例 1:
输入:x = 123
输出:321

示例 2:
输入:x = -123
输出:-321

示例 3:
输入:x = 120
输出:21

示例 4:
输入:x = 0
输出:0

提示:
-231 <= x <= 231 - 1

题解

public int reverse(int x) {
        // 最终返回的值
        int num = 0;
        // 一直循环直至最后一位 123 -》12 -》1 -》0
        while (x != 0) {
            // 取末位的数字
            int i = x % 10;
            // 每次循环去掉末位数字
            x = x / 10;
            // 因为不允许存储long类型,所以无法直接和Integer.MAX/MIN_VALUE直接进行比较
            // 这就相当于是 (最终返回的反转数值/10)和(Integer.MAX_VALUE/10)进行相比较,因为能进到循环里说明后面还有数字,
            // 所以只要当num > 214748364了,无论后面的数字为什么都会大于Integer.MAX_VALUE,亦或当num == 214748364时只要后面的数字大于7
            if (num > 214748364 || (num == 214748364 && i > 7) ) return 0;
            if (num < -214748364 || (num == -214748364 && i < -8) ) return 0;
            num = num * 10 + i;
        }
        return num;

    }