Leetcode刷题记录(python版本):0007整数反转

Leetcode题解

  • 题目:0007整数反转
    • 题目描述
    • 做题记录
    • 总结

题目:0007整数反转

题目描述

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

输入: 123
输出: 321

示例 2:

输入: -123
输出: -321

示例 3:

输入: 120
输出: 21

注意:

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

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/reverse-integer

做题记录

第一次,成功,耗时40ms

class Solution:
    def reverse(self, x: int) -> int:
        if -2**31 <= x <= 2**31-1:
            x = str(x)
            if x[0] == '-':
                result = int(x[0] + x[-1:-len(x):-1])
            else:
                result = int(x[::-1])

            if result > 2**31-1 or result < -2**31:
                result = 0
        else:
            print("超出范围!")

        return result

第二次,根据官方题解进行整理,改为python版本

class Solution:
    def reverse(self, x: int) -> int:
        temp = 0
        MAX = 2**31-1
        MIN = -2**31
        count = 0 # 用于判断x是否为负数,0为正数,1为负数
        # 这里是为什么呢?
        # 因为python的“//”是向下取整,如果单纯的计算负数,还要写好多代码,
        # 相比之下,不如直接将负数转为正数,最后
        # 1.添个负号
       	# 2.判断是否超出范围,即可)
        while x != 0:
            if x < 0:
                count = 1
                x = -x
                if x >= -MIN:
                    return 0
            pop = x % 10
            x //= 10
            if temp > MAX//10 or (temp == MAX//10 and pop > MAX % 10):
                return 0
            temp = 10 * temp + pop
        if count == 1:
            temp = -temp
            if temp < MIN:
                return 0
        return temp

总结

这道题相较而言比较简单,没有过多值得注意的点,但是本人上来就用字符串的方法做,和官方题解完全不同,看到官方题解的那一刻,感觉自己真是没救了。。。
Leetcode刷题记录(python版本):0007整数反转_第1张图片

你可能感兴趣的:(Leetcode)