leecode刷题(12)-- 整数反转

作者: 希希里之海 | 来源:发表于2019-01-16 13:35 被阅读3次

leecode刷题(12)-- 整数反转

整数反转

描述:

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

示例 1:

输入: 123
输出: 321

示例 2:

输入: -123
输出: -321

示例 3:

输入: 120
输出: 21

注意:

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

思路:

这道题总感觉以前见过,跟我们上一道做的反转字符串还是有一些些相似的,但我们不用建立另外的数组来反转整数,这里我们只需要进行相关的数学操作,每次拿出整数的最后一位,放到新建的整数变量 rev 后面,最后,rev便和 x 完全相反了。

代码如下:

class Solution {
    public int reverse(int x) {
        int rev = 0;
        while (x != 0) {
            int pop = x % 10;
            x /= 10;
            rev = rev * 10 + pop;
        }
        return rev;
    }
}

这是代码第一版,思路很简单,但是我们忽略了一个问题,那便是当 rev = rev * 10 + pop 会发生溢出,我们这里需要做溢出判断。

假设 rev 为正数,如果 rev = rev * 10 + pop 发生溢出,那么一定有 rev >= INTMAX / 10 。

同样的,当 rev 为负数时,rev <= INTMIN / 10 会发生溢出。

同时我们需要注意 pop 的数值,题目中整数的数值范围为 [−2^31, 2^31 − 1],2^31-1=2147483647, -2^31=-2147483648,注意最后一位数。

我们修改我们的代码,添加条件,当发生溢出时返回 0 。

完整代码如下:

public class ReverseInt {
    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;
    }

    public static void main(String[] args) {
        int x = -321;
        ReverseInt reverseInt = new ReverseInt();
        System.out.println(reverseInt.reverse(x));
    }
}

相关文章

  • leecode刷题(12)-- 整数反转

    leecode刷题(12)-- 整数反转 整数反转 描述: 给出一个 32 位的有符号整数,你需要将这个整数中每位...

  • Leecode: 7.整数反转

    在刷Leecode, 7.整数反转思路:将整数转为string后反转,再使用int()转回整数可以顺利提交代码,但...

  • leecode刷题(22)-- 反转链表

    leecode刷题(22)-- 反转链表 反转数组 反转一个单链表。 示例: 进阶:你可以迭代或递归地反转链表。你...

  • leecode刷题(11)-- 反转字符串

    leecode刷题(11)-- 反转字符串 反转字符串 描述: 编写一个函数,其作用是将输入的字符串反转过来。 示...

  • leecode刷题(18)-- 报数

    leecode刷题(18)-- 报数 报数 描述: 报数序列是一个整数序列,按照其中的整数的顺序进行报数,得到下一...

  • leecode刷题(16)-- 字符串转换整数

    leecode刷题(16)-- 字符串转换整数 字符串转换整数 描述: 请你来实现一个 atoi 函数,使其能将字...

  • leecode 7反转整数

    给定一个 32 位有符号整数,将整数中的数字进行反转假设我们的环境只能存储 32 位有符号整数,其数值范围是 [−...

  • LeetCode刷题-整数反转

    前言说明 算法学习,日常刷题记录。 题目连接 整数反转[https://leetcode-cn.com/probl...

  • 7.整数反转-reverse

    链接 LeeCode-7-整数反转 参考 知乎 Git 题目描述 给出一个 32 位的有符号整数,你需要将这个整数...

  • LeetCode刷题 7 整数反转

    LeetCode刷题 7 整数反转 题目 给出一个32位的有符号整数,你需要将这个整数中每位上的数字进行反装。示例...

网友评论

    本文标题:leecode刷题(12)-- 整数反转

    本文链接:https://www.haomeiwen.com/subject/iwcmdqtx.html