LeetCode笔记——7. 整数反转

7. 整数反转

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

示例 :
输入: 123
输出: 321

思路

通过 % 求余运算获取数字的最后一位,通过整数除法 /10 去掉最后一位,重复此操作直至数字变为 0,便可获取到数字的每一位。

class Solution {
    //反转
    public int reverse(int x) {
        //记录结果
        int rev = 0;
        while (x != 0) {
            //获取个位
            int pop = x % 10;
            //删除个位
            x /= 10;
            //溢出判断
            if (rev > Integer.MAX_VALUE/10 ||
               (rev == Integer.MAX_VALUE / 10 && pop > 7)) return 0;
            if (rev < Integer.MIN_VALUE/10 ||
              (rev == Integer.MIN_VALUE / 10 && pop < -8)) return 0;
            rev = rev * 10 + pop;
        }
        return rev;
    }
}

注意:溢出判断

  • 如果 temp=rev * 10 + pop导致溢出,那么一定有 rev ≥ INTMAX/10。
  • 如果 rev > INTMAX/10​,那么 temp=rev * 10 + pop 一定会溢出。
  • 如果 rev==INTMAX/10,那么只要 pop > 7,temp=rev⋅10+pop 就会溢出,因为INTMAX个位为7。

改进:
1、使用Long类型来接收结果。
2、因为int类型最大数和最小数开头的数字只能是1或2,所以如果有最后一次循环的话,pop的值一定为1或2,所以(rev == Integer.MAX_VALUE / 10 && pop > 7)和 (rev == Integer.MIN_VALUE / 10 && pop < -8)判断可以省略。

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 给定一个 32 位有符号整数,将整数中的数字进行反转。 示例 1: 输入: 123输出: 321示例 2: 输入:...
    bocsoft阅读 893评论 0 0
  • 20180919-摘抄自7. 反转整数 给定一个 32 位有符号整数,将整数中的数字进行反转。 示例 1: 输入:...
    moralok阅读 460评论 0 0
  • BAT面试算法进阶(6)- BAT面试算法进阶(6)-最长回文子串(方法二)BAT面试算法进阶(5)- BAT面试...
    CC老师_HelloCoder阅读 915评论 0 0
  • https://leetcode.windliang.cc/ 第一时间发布 题目描述(简单难度) 很简单,就是输入...
    windliang阅读 300评论 0 0
  • (一)改变思维方式,人生将180度转弯 1.生活态度:极度认真地过好每一天。 2.人生的意义:提升心性、磨练灵魂。...
    PZ坚持行动ING阅读 1,483评论 0 1