专栏首页灵魂画师牧码画解算法 7-整数反转

画解算法 7-整数反转

题目链接

https://leetcode-cn.com/problems/reverse-integer/

题目描述

给出一个 32 位的有符号整数,你需要将这个整数中每位上的数字进行反转。

示例 1:

输入: 123
输出: 321

示例 2:

输入: -123
输出: -321

示例 3:

输入: 120
输出: 21

注意:

假设我们的环境只能存储得下 32 位的有符号整数,则其数值范围为 [−231, 231 − 1]。请根据这个假设,如果反转后整数溢出那么就返回 0

解题方案

思路

  • 标签:数学
  • 本题如果不考虑溢出问题,是非常简单的。解决溢出问题有两个思路,第一个思路是通过字符串转换加try catch的方式来解决,第二个思路就是通过数学计算来解决。
  • 由于字符串转换的效率较低且使用较多库函数,所以解题方案不考虑该方法,而是通过数学计算来解决。
  • 通过循环将数字x的每一位拆开,在计算新值时每一步都判断是否溢出。
  • 溢出条件有两个,一个是大于整数最大值MAX_VALUE,另一个是小于整数最小值MIN_VALUE,设当前计算结果为ans,下一位为pop
  • ans * 10 + pop > MAX_VALUE这个溢出条件来看
    • 当出现 ans > MAX_VALUE / 10还有pop需要添加 时,则一定溢出
    • 当出现 ans == MAX_VALUE / 10pop > 7 时,则一定溢出,72^31 - 1的个位数
  • ans * 10 + pop < MIN_VALUE这个溢出条件来看
    • 当出现 ans < MIN_VALUE / 10还有pop需要添加 时,则一定溢出
    • 当出现 ans == MAX_VALUE / 10pop < -8 时,则一定溢出,8-2^31的个位数

代码

class Solution {
    public int reverse(int x) {
        int ans = 0;
        while (x != 0) {
            int pop = x % 10;
            if (ans > Integer.MAX_VALUE / 10 || (ans == Integer.MAX_VALUE / 10 && pop > 7)) 
                return 0;
            if (ans < Integer.MIN_VALUE / 10 || (ans == Integer.MIN_VALUE / 10 && pop < -8)) 
                return 0;
            ans = ans * 10 + pop;
            x /= 10;
        }
        return ans;
    }
}

画解

本文分享自微信公众号 - 牧码啦(mumalo),作者:灵魂画师牧码

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2019-06-07

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 画解算法:13. 罗马数字转整数

    https://leetcode-cn.com/problems/roman-to-integer/

    灵魂画师牧码
  • 画解算法 171-Excel表列序号

    https://leetcode-cn.com/problems/excel-sheet-column-number/

    灵魂画师牧码
  • 画解算法 | 458.可怜的小猪

    有 1000 只水桶,其中有且只有一桶装的含有毒药,其余装的都是水。它们从外观看起来都一样。如果小猪喝了毒药,它会在 15 分钟内死去。

    灵魂画师牧码
  • 桥接、NAT、Host-only上网方式的区别

    经常使用虚拟机的小伙伴们都遇到过网络链接过程中的各种问题,仔细查看设置会发现有:桥接、NAT、Host-only 等设置,vmware 等虚拟机后还会自动生成v...

    用户5807183
  • laravel5.1的用户权限管理的实现 原

    修改database/migrations/2016_12_02_070731_create_blogs_table.php文件

    lilugirl
  • AI拓荒者旷视的坎坷

    2004年,图灵奖创立以来唯一一位亚裔获奖者姚期智,辞去普林斯顿大学终身教职,毅然回国,到清华大学全职任教,并在2005年建立清华学堂计算机科学实验班,人称“姚...

    刘旷
  • (32) 剖析日期和时间 / 计算机程序的思维逻辑

    本节和下节,我们讨论在Java中如何进行日期和时间相关的操作。 日期和时间是一个比较复杂的概念,Java API中对它的支持不是特别好,有一个第三方的类库反而特...

    swiftma
  • [UWP 自定义控件]了解模板化控件(10):原则与技巧

    一个控件是否好用,很大一部分取决于名称。好的命名能让使用者用起来更得心应手,坏的命名只会让代码更混淆。下面总结了UWP控件命名的一般模式:

    dino.c
  • 老板丢给我60万行的Excel数据,幸亏我会Python,不然就惨了

    一个朋友在某运动品牌公司上班,老板给他布置了一个处理客户订单数据的任务。要求是根据订单时间和客户id判断生成四个新的数据:

    诸葛青云
  • python之多进程fork

     python中实现多进程是通过os.fork()这个函数来实现,这个函数和操纵系统本身结合的非常紧密,windows下就无法使用os.fork()这个函数。...

    py3study

扫码关注云+社区

领取腾讯云代金券