一、题设
给你一个 32 位的有符号整数 x ,返回将 x 中的数字部分反转后的结果。
如果反转后整数超过 32 位的有符号整数的范围 [−231, 231 − 1] ,就返回 0。
假设环境不允许存储 64 位整数(有符号或无符号)。
二、基本思路
1.将输入的整数转换成字符列表,按有‘-’、末尾有‘0’、输入为0讨论,逆置这个字符列表,再合并为一个字符串返回即可
2.若有‘-’号,则将转换的范围避开‘-’所在列表下标;末尾有'0'则通过除法除掉,输入为0直接返回0
三、代码实现
class Solution(object):
def reverse(self, x):
#若输入为0,直接返回
if x == 0:
return x
#刨去转换后开头的0
while x%10==0:
x=x/10
#整数转化成字符列表
lis =list(str(x))
#处理开头为0 以及 '-'的问题
lens = len(lis)
left = 0
#处理'-'问题
if lis[0]=='-':
left = 1
#逆置列表
right = lens - 1
while(left < right):
temp = lis[left]
lis[left] = lis[right]
lis[right] = temp
left += 1
right -= 1
#合并字符列表lis成一个串res
res = eval("".join(lis))
#判断是否超范围
if res < -pow(2,31) or res > pow(2,31)-1:
return 0
return res
四、效率总结
效率从反馈来说还是相对可以的,唯一可以改进的地方是逆置循环,可以通过对折来实现,空间效率会更高。这道题让我知道了字符串不好拿出单个的字符,要转换成列表存放单个字符才会有对应下标。其次数字转字符串用str()函数,字符串合并用X.join()函数,字符串转数字用eval()函数。总体来说还是比较简单的,那今天就到这儿啦,明天见~