题目:
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%)
那我们下题见