LeeTCode.7整数反转

LeeTCode.7整数反转

题目描述:

给你一个 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

**分析:**将一个数反转,可以通过取余获得末尾数,并通过乘10将之往前移动一位。
本题要注意的点是题目中加粗部分,环境中不允许存储64为整数,即反转过来的数要在范围 [−231 , 231 − 1]内。
231=2147483648;
所以我们需判断反转过来的与与2147483648的大小;
因为我是通过乘10来移动,所以在乘10之前需要判断当前数与2147483648的大小,
如果未提前比较,则之后出现越界的数就会报错。
假设为正数
假设目前的数再乘一次10即将越界。那么当前的数应该<=214748364,并且尾数不大于7;
负数时同理,当前数应该大于等于-214748364,并且并且尾数不大于8;

代码如下:

class Solution {
    public int reverse(int x) {
        int rev = 0;//定义反转后的数,先置为0
        while(x != 0){
            int tmp = x%10;//取余,获得尾数
            if(rev >214748364 || rev ==214748364 && tmp >7 ){//正数情况,判断是否越界
                return 0;
            }
            if( rev< -214748364 || rev==-214748364 && tmp>8){//负数情况,判断是否越界
                return 0;
            }
            x/=10;//缩短x,去除已经获得的尾数
            rev = rev * 10 + tmp;//获得新的反转后的数
            
        }
        return rev;
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

五 七

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

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

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

打赏作者

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

抵扣说明:

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

余额充值