题解 | #反转数字#

反转数字

http://www.nowcoder.com/practice/1a3de8b83d12437aa05694b90e02f47a

描述

给你一个 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), 存储结果的字符串占用的空间。

最后

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

图片说明

全部评论

相关推荐

09-30 12:39
门头沟学院 C++
点赞 评论 收藏
分享
11-09 11:01
济南大学 Java
Java抽象带篮子:外卖项目真得美化一下,可以看看我的详细的外卖话术帖子
点赞 评论 收藏
分享
预计下个星期就能开奖吧,哪位老哥来给个准信
华孝子爱信等:对接人上周说的是这周
点赞 评论 收藏
分享
评论
点赞
收藏
分享
牛客网
牛客企业服务