LeetCode(7)-Python-整数反转(reverse-integer/submissions)

本文介绍了一种算法,用于反转32位有符号整数的每一位数字,同时保持其符号不变。提供了两种解决方案:一是通过数字操作进行反转,二是通过字符串处理实现反转。在反转过程中,会检查整数是否超出[−2^31,2^31−1]的范围,若超出则返回0。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

题目描述

给出一个 32 位的有符号整数,你需要将这个整数中每位上的数字进行反转。

示例

输入: 123
输出: 321

输入: -123
输出: -321

要求

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

解题思路

我们观察题目的要求和给出的示例,发现我们所要做的就是将输入的数字进行倒序输出,并保持其符号不变。对于超出数值范围[−231,231−1][−2^{31}, 2^{31} − 1][231,2311] 的内容,直接返回0。

对于这个问题,我们可以使用两种解法,一种是将其就看作是数字的反转,我们只要逐步进行取余操作,得到各个位上的数字即可。

另外一种是可以看作为字符串的反转,我们只需要反转这个字符串就可以完成整数的反转操作,但需注意整数为负数的问题。

以数字进行反转的代码如下,只需逐步取余

class Solution:
    def reverse(self, x: int) -> int:
        num = x if x>0 else -x
        n = 0
        
        while num:
            n = n*10 + num%10
            num = num//10
        n = n if x>0 else -n 
        
		if n > 2147483647 or n < -2147483648:  
            return 0
  
        return n 
# 48ms

以字符串的反转来解决这个问题的代码如下,注意‘-’的存在

class Solution:
    def reverse(self, x: int) -> int:
        s = str(x)
        
        if x > 0:
            s = s[::-1]
        else:
            s = s[0] + s[1:][::-1]
        
        x = int(s)
        
        if x > 2147483647 or x < -2147483648:
            return 0
        
        return x
# 36ms

人生不易 且行且珍惜

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值