• 图解LeetCode——7. 整数反转(难度:中等)


    一、题目

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

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

    假设环境不允许存储 64 位整数(有符号或无符号)。

    二、示例

    2.1> 示例 1:

    【输入】x = 123
    【输出】321

    2.2> 示例 2:

    【输入】x = -123
    【输出】-321

    2.3> 示例 3:

    【输入】x = 120
    【输出】21

    2.4> 示例 4:

    【输入】x = 0
    【输出】0

    提示:

    • -2^31 <= x <= 2^31 - 1

    三、解题思路

    本题的难点有两个:

    难点1: 采用哪种方式,将低位数字迁移到高位上;
    难点2: 在拼装最终结果的时候,如何判断其是否越界;

    针对难点一,我们即可以采用将整数型转换为字符类型,然后通过堆栈的特性让其达到“反转”的操作。但是,我们也可以采用对x取余x%10)的方式,获取最后一位,然后在下次循环之前,我们再对x取整x/10)的方式获取除了最低位之外的其他高位。例如:x=123,执行x%10会得到3,执行x/10会得到12。3用于数据迁移,12赋值给x,用于下次循环。

    针对难点二:根据题目要求,不允许存储 64 位整数(有符号或无符号),所以我们在拼装最终结果时,也无法使用long类型了。由于,Integer.MAX_VALUE = 2147483647,Integer.MIN_VALUE = -2147483648,当我们计算的result超出这个范围的话,那么就会变为负值,即:result=2147483647,再执行result+1的话,result就等于-2147483648了。那么,根据这个特性,我们其实可以对比本次循环计算的result/10 与上一次循环得到的result是否相同。具体如下图所示:

    四、代码实现

    1. class Solution {
    2.     public int reverse(int x) {
    3.         int last, result = 0;
    4.         while (x != 0) {
    5.             last = result;
    6.             result = result * 10 + x % 10;
    7.             if (last != result / 10return 0;
    8.             x /= 10;
    9.         }
    10.         return result;
    11.     }
    12. }

    今天的文章内容就这些了:

    写作不易,笔者几个小时甚至数天完成的一篇文章,只愿换来您几秒钟的 点赞 & 分享 。

    更多技术干货,欢迎大家关注公众号“爪哇缪斯” ~ \(^o^)/ ~ 「干货分享,每天更新」

  • 相关阅读:
    2.1.5操作系统之线程概念与多线程模型
    IPIDEA的使用方式
    Flume启停脚本f1.sh
    [SWPUCTF 2021 新生赛]
    计算机毕业设计Java毕业设计流程管理系统(源码+系统+mysql数据库+lw文档)
    3D模型格式转换工具HOOPS Exchange:模型数据自由导入和导出
    精读《精通 console.log》
    IDEA快捷键
    SQL使用场景解决一对多查询、分页、复杂排名等问题之ROW_NUMBER、DENSE_RANK、RANK用法
    开源大数据集群部署(十四)Ranger集成Hbase
  • 原文地址:https://blog.csdn.net/qq_26470817/article/details/126888472