LeetCode07整数反转(JAVA)

20 篇文章 0 订阅
本文解析了LeetCode中的整数反转问题,提供了Java代码实现,并讨论了如何避免溢出及判断结果范围。通过实例演示和数学原理,详细介绍了如何反转32位有符号整数,确保结果在[-2^31, 2^31-1]范围内。
摘要由CSDN通过智能技术生成

LeetCode题解(JAVA)



题目描述

给你一个 32 位的有符号整数 x ,返回将 x 中的数字部分反转后的结果。

如果反转后整数超过 32 位的有符号整数的范围 [−231, 231 − 1] ,就返回 0。

假设环境不允许存储 64 位整数(有符号或无符号)。

在这里插入图片描述


提示:以下是本篇文章正文内容,下面案例可供参考

思路

整数反转,就是将原先在末尾的数字,移动到首位;倒数第二位数移动至正数第二位……

若原整数为num1,反转后的整数为num2;
那么num2的首位数即是num1的末位数,num2的第二位数即是num1的倒数第二位数。

举个例子,整数45678,反转后应该是87654,则反转过程如图
在这里插入图片描述
再通过数学的角度说明:
在这里插入图片描述

所以,每一轮次计算整数的末位数:num % 10,接着num / 10,为下一轮做准备,循环直到num / 10 = = 0

最后,注意内存溢出的问题即可。

代码实现

class Solution {
    public int reverse(int x) {
        /**
        溢出这么难判断的原因就是使用 int 去存反转后的结果,
        如果溢出就会把溢出部分的数据位丢掉,导致结果不正确。
        那我们用一个更长的数据类型(long)去存反转后的结果
        最后直接把反转后的结果与 int 类型的上下限比较即可判断是否溢出。
        */
        long t = x;
        long res=0;

        //求每一位,叠加
        while(t != 0){
            res = res * 10 + t % 10;
            t = t / 10;
        }
        //判断是否溢出
        if(res < Integer.MIN_VALUE || res > Integer.MAX_VALUE){
            return 0;
        }
        return (int)res;
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值