题目描述

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

示例 1:

1
2
输入: 123
输出: 321

示例 2:

1
2
输入: -123
输出: -321

示例 3:

1
2
输入: 120
输出: 21

注意:

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

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

解题思路

  • 转换前后的数值 满足数值范围要求
  • 既然要实现数值的反转,最简单的是通过str[::-1]可以实现。所以要先把输入的数值转换为str格式
  • 然后要判断输入的数值的正负,以及末尾是否为0:
    1. 如果即是负数,末尾又包含0,则数值部分为 str[1:-1] ,然后前面加上负号”-”
    2. 如果为负数,末尾不含有0,则数值部分为 str[:-1],然后前面加上负号”-”
    3. 如果既不是负数末尾也不为0,则直接返回转换后的数值 int(str)。注意,int函数,默认把数值最前面的0省略。

算法实现

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
class Solution:
    def reverse(self, x: int) -> int:
        #if -2147483648 <= x <= 2147483647:
        str1 = str(x)
        str2 = str1[::-1]
        if -2147483648 <= x <= 2147483647 :
            if str2[-1]=='-' and str2[0]=='0':
                if (-2147483648 <= int('-'+str2[1:-1]) <= 2147483647):
                    return int('-'+str2[1:-1])
                else:
                    return 0
            elif str2[-1]=='-':
                if (-2147483648 <= int('-'+str2[:-1]) <= 2147483647):
                    return int('-'+str2[:-1])
                else:
                    return 0
            else:
                if (-2147483648 <= int(str2) <= 2147483647):
                    return int(str2)
                else:
                    return 0
        else:
            return 0
1032 / 1032 个通过测试用例 状态:通过
执行用时:28 ms内存消耗:13.7 MB 执行用时击败99.62%