今天去有一场技术分享,回家后整个人都有点累
继续坚持着刷一道题
https://leetcode-cn.com/problems/reverse-integer/description/
其实也是我在面试经常愿意问的一道题,把一个数字逆置
思路就是不断取余和整除10
里面需要注意符号和取值范围,算法本身不复杂,要能一次bug free才是本事!
最先用了一种转字符串的方法,有点丑
class Solution:
def reverse(self, x):
"""
:type x: int
:rtype: int
"""
strRet = ""
ret = 0
flag = False
if x < 0:
x = abs(x)
flag = True
while x > 0:
strRet += str(x%10)
x = x//10
if strRet == "":
return 0
if flag:
ret = int(strRet) * -1
else:
ret = int(strRet)
if ret > 2**31-1 or ret < -1*2**31:
return 0
else:
return ret
这段代码太硬了,就有了一个优化点的方案,算法的思路并没有变,只是改了下语法和实践方法
class Solution:
def reverse(self, x):
"""
:type x: int
:rtype: int
"""
a = abs(x)
r = 0
while a > 0:
r = r * 10 + a % 10
a = a//10
if x > 0 and r < 1*2**31:
return r
elif x < 0 and r <= 2**31-1:
return -r
else:
return 0