python实现整数反转

Leetcode刷题笔记 专栏收录该内容
26 篇文章 1 订阅

题目描述

给出一个 32 位的有符号整数,你需要将这个整数中每位上的数字进行反转。
LeetCode原题地址:https://leetcode-cn.com/problems/reverse-integer/

测试用例

  • 示例1

输入: 123
输出: 321

  • 示例 2

输入: -123
输出: -321

  • 示例 3

输入: 120
输出: 21

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

代码实现

  • 字符串反转
class Solution(object):
    def reverse(self,x):
        """利用python的字符串反转来处理int数据
        :param x:
        :return:
        """
        #对于输入为负数,将其转换为正数的字符串
        if x < 0:
            s_x = str(x*-1)
        else:
            s_x = str(x)
        if len(s_x) < 2:
            return int(s_x)

        #反转字符串
        if x > 0:
            ret = int(s_x[::-1])
        else:
            ret = int(s_x[::-1]) * -1
        #边界判断
        INT_MAX_VALUE = 2**31 - 1
        INT_MIN_VALUE = -2**31
        if ret > INT_MAX_VALUE or ret < INT_MIN_VALUE:
            return 0
        return ret
  • 利用取余的思想反转
class Solution(object):
    def reverse(self,x):
        rev = 0
        # 边界判断
        INT_MAX_VALUE = 2 ** 31 - 1
        INT_MIN_VALUE = -2 ** 31
        #用来判断x是否大于0,小于0的数转换成大于0处理
        x_gt_zero = 1
        if x < 0:
            #将x转换为大于0的整数
            x *= -1
            x_gt_zero = -1
        while x != 0:
            pop = x % 10
            x //= 10
            if rev > INT_MAX_VALUE / 10 or (rev == INT_MAX_VALUE / 10 and (pop > 7)):
                return 0
            if rev < INT_MIN_VALUE / 10 or (rev == INT_MIN_VALUE / 10 and (pop < -8)):
                return 0
            rev = rev * 10 + pop
        return rev * x_gt_zero

注意:python的int类型没有长度限制,所以需要进行边界判断,对于负数进行取余时需要先将它转换为正数在取余,否则会导致结果计算错误
参考:

  1. LeetCode详细题解
  • 0
    点赞
  • 0
    评论
  • 2
    收藏
  • 一键三连
    一键三连
  • 扫一扫,分享海报

打赏
文章很值,打赏犒劳作者一下
相关推荐
©️2020 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页

打赏

修炼之路

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

¥2 ¥4 ¥6 ¥10 ¥20
输入1-500的整数
余额支付 (余额:-- )
扫码支付
扫码支付:¥2
获取中
扫码支付

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

打赏作者

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

抵扣说明:

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

余额充值