题目描述

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

示例 1:

输入: 123
输出: 321


示例 2:

输入: -123
输出: -321


示例 3:

输入: 120
输出: 21
注意:

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

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

解答

  • 解法:字符串切片和字符转反转

  将传入的整数转为字符串类型,将字符串反转,再将反转后的字符串转为int型

  需要注意的是:

  1. 如果x是负数,如-123,那么经过反转后的字符串为“321-”,此时再将字符串转为int型会变成321-,报错。

  为了避免上述错误,增加一个特判条件,如果x<0,则将反转后的字符串最后一位"-"号去掉后,再转化为int型,由于是负数,还需要乘-1

2.  题目要求的不是x的范围,而是反转后的整数范围是 [−2,  2 − 1]

def reverse(x):
    #如果x∈[-9,9],直接返回x
    if x <10 and x >-1*10: return x

    #特判
    if x < 0 :
        a = str(x) #将int整数转化为字符串
        b = a[::-1] #将字符串反转
        c = b[:-1] #去掉字符串末尾的负号
        if int(c) > 2**31:
            return 0
        else:
            return int(c)*-1

    a = str(x) #整数转为string
    b = a[::-1] #将字符串反转
    if int(b) < 2**31-1:
        return int(b)
    else:
        return 0

  执行用时:40ms

01-02 05:14