描述

给你一个 32 位的有符号整数 x ,返回将 x 中的数字部分反转后的结果。
你有注意到翻转后的整数可能溢出吗?因为给出的是32位整数,则其数值范围为[−2^{31}, 2^{31} − 1]。翻转可能会导致溢出,如果反转后的结果会溢出就返回 0。

示例1

输入:
12

返回值:
21

示例2

输入:
-123

返回值:
-321

示例3

输入:
10

返回值:
1

示例4

输入:
1147483649

返回值:
0

思路

其实大家看上面的图就能大概理解啥意思了。通过 % 10,得到最后一位 也就是个位; 然后将这个数字加上 之前计算的结果 * 10.

AC 代码

    public int reverse (int x) {
        // write code here
        long result = 0;
        // 还有数字没有反转完时
        while (x != 0) {
            // * 10 是为了将已经发转的数字向左移一位。
            // % 10 是为了只留下 个位数
            result = result * 10 + x % 10;
            // 如果结果溢出了,就直接返回 0
            if (result > Integer.MAX_VALUE) {
                return 0;
            }
            // 剔除掉已经反转后的 个位
            x = x / 10;
        }
        return result > Integer.MAX_VALUE ? 0 : (int)result;
    }

时间复杂度:O(N), N 为数字的位数。
空间复杂度:O(N), 存储结果的字符串占用的空间。

最后

大家可以去 【牛客网-题库-在线编程】去练习一下。
可以去微信搜索:【蘑菇睡不着】交个朋友~
也可以扫描下方二维码。

图片说明