Leetcode-7-整数反转

007-整数反转

问题描述

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

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/reverse-integer
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

解题

这道题的难点在于如何判断溢出,即:如何判断问题描述当中加粗的那一部分文字

直接上代码,在代码中解释:

C#代码

public class Solution {
     public int Reverse(int x) {
            int _min = -(int)(Math.Pow(2,31));
            int  _max =(int) (Math.Pow(2,31) -1);

            int ans = 0;
            while(x != 0)
            {
                int temp = x%10;
				//判断溢出部分
                if(ans > _max/10 || (ans == _max/10&& temp > 7))
                {
                    return 0;
                }

                if(ans < _min/10 ||(ans == _min/10 && temp < -8))
                {
                    return 0;
                }
                ans =  (ans*10 + temp); //计算反转数字
                x = x/10;
            }

            return ans;
        }
}

代码中已经标注出来的溢出部分

首先,我们一定要在计算反转数字之前,作溢出判断。如果先运算,那么有可能运算结果已经产生溢出,整个数就不对了。

既然在运算之前作判断,那么就得对下一次运算负责,这就是为什么_max, _min要先除以10的原因

Python代码

相同的思路,Python的代码就要简单许多,因为并不需要你去考虑溢出的问题,你只需做好一个范围判断就可以了

class Solution(object):
    def reverse(self, x):
        flag = 0
        if x < 0:
            flag = 1
            x = -x
        _max = 2**31 - 1
        _min = -2**31
        ans = 0
        while x!=0:
            t = x%10
            ans = ans * 10 + t
            x = x//10
        if flag == 1:
            return -ans if (-ans > _min) else 0
        else:
            return ans if  ans < _max else 0

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值