整数反转问题(符号与越界问题)

初级算法 - LeetBook - 力扣(LeetCode)全球极客挚爱的技术成长平台

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

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

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

示例 1:

输入:x = 123
输出:321
示例 2:

输入:x = -123
输出:-321
示例 3:

输入:x = 120
输出:21
示例 4:

输入:x = 0
输出:0
 

提示:

-231 <= x <= 231 - 1

思路一:每次得到数字的个位对应的数字不断*10+个位数再加上符号就可以得到反转的整数

注意问题:整数过大越界问题,符号问题

class Solution {
    public int reverse(int x) {
        //先得到对应是正数还是负数
        int note = x>0?1:-1;
        //将数字转化成正数操作
        x = Math.abs(x);
        //这里的result和lastresule是有区别的对比防止数组越界的
        int result=0;
        int num=0;  
        int lastresult=0;
        while(x>0) {
            //得到个位的数字
            num=x%10;
            //一步步得到对应的反转值
            result=lastresult*10+num;
            //这一步是防止数字越界的,只需要与上一次的result比较是否能反推就可以得到结论如果越界返回0
             if((result-num)/10!=lastresult) {
                return 0;
            }
            lastresult=result;
            x=x/10;
          
        }
        //注意符号
        return result*note;

    }
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

极品小學生

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值