LeetCode0007-整数反转

LeetCode整数反转

题目:
给定一个32位的有符号整数,你需要将这个整数中每位上的数字进行反转:
示例1:
输入:123
输出:321
示例2:
输入:-123
输出:-321
示例3:
输入:120
输出:21

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

代码:
/**
 * 0007-整数反转
 * 给定一个32位有符号整数,你需要将这个整数中每位上的数字进行反转。
 * 示例1:
 * 输入:123
 * 输出:321
 * 示例2:
 * 输入:-123
 * 输出:-321
 * 示例3:
 * 输入:120
 * 输出:21
 * 注意:假设我们的环境只能存储得下32位的有符号整数,则其数值范围为[-2^31,2^31-1]。
 * 根据这个假设,如果反转后整数溢出,那么就返回0。
 */
class Solution {
    public int reverse(int x) {
        // 保存结果
        int result = 0;

        while (x != 0) {
            int pop = x % 10;   // 取出最后一位
            x /= 10;    // 去掉x的最后一位
            // 判断是否正向越界
            /// 7或8是因为最大值2的31次方是2147483648,最小值负2的31次方减一是-2147483647,这两个数值的个位数是7和8.
            if (result > Integer.MAX_VALUE / 10 || (result == Integer.MAX_VALUE / 10 && pop > 7)) {
                return 0;
            }
            // 判断是否负向越界
            if (result < Integer.MIN_VALUE / 10 || (result == Integer.MIN_VALUE / 10 && pop < -8)) {
                return 0;
            }
            // 计算结果
            result = result * 10 + pop;
        }
        return result;
    }
}

/**
 * 测试类
 */
public class Study0007 {
    public static void main(String[] args) {
        System.out.println(new Solution().reverse(-123));
    }
}

结果:

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值