美文网首页
7.整数反转-java实现

7.整数反转-java实现

作者: ontheway_sh | 来源:发表于2020-08-14 15:43 被阅读0次

第7题:整数反转

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

示例 1:

输入: 123
输出: 321

示例 2:

输入: -123
输出: -321

示例 3:

输入: 120
输出: 21

V1版本

V1版本简单暴力,将整数反转到list中,在按位累加,不过效率是硬伤,代码如下

public int reverse(int x) {
        // 1位数反转就是自己
        if (x > -10 && x < 10) {
            return x;
        }
        // 会浪费空间
        List<Integer> list = new ArrayList<>(32);
        while (x != 0) {
            list.add(x % 10);
            x /= 10;
        }
        // 用long类型来接收
        long result = 0;
        for (int i = list.size() - 1, j = 0; i >= 0; i--,j++) {
            result += list.get(i) * Math.pow(10, j);
        }
        // 超过long类型的边界则返回0
        if (result > Integer.MAX_VALUE || result < Integer.MIN_VALUE) {
            return 0;
        }
        return (int) result;
    }

结果也是不出所料


image.png

V2版本

V1版本用list保存本身就很浪费空间,这个版本想办法将list去掉
其实也不需要用list保存,直接用结果集保存就行了
例:123
第一次获取到第一位 3
将 3加入result,result = 3
第二次获取第二位 2
将 3 * 10 + 2 = 32
第三次将32 * 10 + 1 = 321
反转结束,代码如下

public int reverse(int x) {
        // 1位数反转就是自己
        if (x > -10 && x < 10) {
            return x;
        }
        // 用long类型来接收
        long result = 0;
        while (x != 0) {
            result = result * 10 + (x % 10);
            x /= 10;
        }
        // 超过long类型的边界则返回0
        if (result > Integer.MAX_VALUE || result < Integer.MIN_VALUE) {
            return 0;
        }
        return (int) result;
    }
image.png

V3版本

V3版本参考官文的 ##弹出和推入数字 & 溢出前进行检查##
返回还是用int接收,不过要提交判断是否溢出,代码如下

public int reverse(int x) {
        // 1位数反转就是自己
        if (x > -10 && x < 10) {
            return x;
        }
        int result = 0;
        int num;
        while (x != 0) {
            num = x % 10;
            // 检查是否会越界
            if (result > Integer.MAX_VALUE / 10 || (result == Integer.MAX_VALUE / 10 && num > 7)) {
                return 0;
            }
            if (result < Integer.MIN_VALUE / 10 || (result == Integer.MIN_VALUE / 10 && num < -8)) {
                return 0;
            }
            result = result * 10 + num;
            x /= 10;
        }
        return result;
    }
image.png

执行结果也是1ms,不过在循环中加了两个if判断感觉和v2版本的总体评分应该也差不多

相关文章

  • 7.整数反转-java实现

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

  • Leecode: 7.整数反转

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

  • [day1] [LeetCode] [title7,9]

    7. 反转整数 给定一个 32 位有符号整数,将整数中的数字进行反转。 示例1: 输入: 123 输出: 321 ...

  • 7. 反转整数

    20180919-摘抄自7. 反转整数 给定一个 32 位有符号整数,将整数中的数字进行反转。 示例 1: 输入:...

  • 算法练习四

    7. 反转整数 给定一个 32 位有符号整数,将整数中的数字进行反转。 示例 1: 输入: 123输出: 321示...

  • LeetCodeDay07 —— 反转整数&字符串中的第一个唯一

    7. 反转整数 描述 给定一个 32 位有符号整数,将整数中的数字进行反转。 示例 注意 假设我们的环境只能存储 ...

  • 7.反转整数

    给定一个 32 位有符号整数,将整数中的数字进行反转。 示例 1: 示例 2: 示例 3: 注意:假设我们的环境只...

  • 7. 反转整数

    给定一个 32 位有符号整数,将整数中的数字进行反转。 示例 1:输入: 123输出: 321 示例 2:输入: ...

  • 7.反转整数

    题目 思路1.判断范围2.反向生成数字代码

  • 7. 反转整数

    一、题目原型: 给定一个 32 位有符号整数,将整数中的数字进行反转。输入: 123输出: 321输入: -123...

网友评论

      本文标题:7.整数反转-java实现

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