leetcode with python:7. Reverse Integer

题目:

Given a signed 32-bit integer x, return x with its digits reversed. If reversing x causes the value to go outside the signed 32-bit integer range [-2^31,2^31-1], then return 0.

Assume the environment does not allow you to store 64-bit integers (signed or unsigned).

给定一数n,回传其反转后的结果,但若反转后该数超出[-2^31,2^31-1]的範围,则回传0

这题最麻烦的点在于不能使用[-2^31,2^31-1]範围外的数

class Solution:    def reverse(self, x: int) -> int:        if x==0: #若为0则直接回传            return 0                flag=0        if x<0: #纪录该数是不是负数            x=-x            flag=1                     while x%10==0: #去除尾0            x=x//10                x=str(x) #转字串方便操作                MIN="2147483648" #判断反转后是否溢出        MAX="2147483647"        if len(x)==10: #长度10之下的数反转也不会溢出            if flag: #正负边界不同                for i in range(10):                    if int(x[-i-1])>int(MIN[i]):                        return 0                    elif int(x[-i-1])<int(MIN[i]):                        break            else:                for i in range(10):                    if int(x[-i-1])>int(MAX[i]):                        return 0                     elif int(x[-i-1])<int(MAX[i]):                        break                                ans=0 #反转工程        n=1        for i in x:            ans=ans+int(i)*n            n=n*10                            if flag: #根据正负回传            return -ans        else:            return ans

开始前先纪录该数是否是负数,若是将其转正方便计算
接着将尾端的0全数去除,因为反转后的数头不该有0
再来转字串末位往上跟最大边界首位往下比大小
藉此判断反转后会不会溢出
若会则直接回传0
判断完我们就能安心反转了
反转后根据先前纪录此数的正负回传
最后执行时间34ms(faster than 92.06%)

那我们下题见


关于作者: 网站小编

码农网专注IT技术教程资源分享平台,学习资源下载网站,58码农网包含计算机技术、网站程序源码下载、编程技术论坛、互联网资源下载等产品服务,提供原创、优质、完整内容的专业码农交流分享平台。

热门文章