7. 整数反转

题目

https://leetcode-cn.com/problems/reverse-integer/

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

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

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

示例 1:

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

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

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

输入:x = 0
输出:0

关键词

  • 数字反转
  • 数字反转后的结果的范围 [−2^31,  2^31 − 1] ,就返回 0

解法一

常规: 将数字变为字符串处理

class Solution:
    def reverse(self, x: int) -> int:
        x1 = abs(x)
        x1 = str(x1)[::-1]
        x1 = int(x1) if x >= 0 else -int(x1)
        if x1 > 2 ** 31 - 1 or x1 < -2 ** 31:
            return 0
        return x1

解法二

  • while 循环处理数字
class Solution:
    def reverse(self, x: int) -> int:
        x1 = abs(x)
        res = 0
        while x1 > 0:
            a = x1 % 10
            x1 = x1 // 10
            res = res * 10 + a
        if x < 0:
            res = -res
        print(res)
        if res > 2 ** 31 - 1 or res < -2 ** 31:
            return 0
        return res
  • 用 while 循环基本也可以用递归
class Solution:
    def reverse(self, x: int) -> int:
        x1 = abs(x)
        def a(x1, res=0):
            if x1 == 0:
                return res
            c = x1 % 10
            b = x1 // 10
            res = res * 10 + c
            return a(b, res)
        x1 = a(x1)
        if x < 0:
            x1 = -x1
        if x1 > 2 ** 31 - 1 or x1 < -2 ** 31:
            return 0
        return x1
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值