Leetcode 7 Reverse Integer
Given a 32-bit signed integer, reverse digits of an integer.
Example 1:
Input: 123
Output: 321
Example 2:
Input: -123
Output: -321
Example 3:
Input: 120
Output: 21
Note:
Assume we are dealing with an environment which could only store integers within the 32-bit signed integer range: [−231, 231 − 1]. For the purpose of this problem, assume that your function returns 0 when the reversed integer overflows.
解决方法:考虑转换成字符串形式然后进行reverse
需要注意:1.负数要先变成正数再转,不然负号会放到后面转成int的时候有Runtime Error.
2.人家给个Note 是需要你考虑如果输出溢出的情况,int类型应该是在 [0x80000000,0x7fffffff]之间,此处用16位补码,因为python 转16进制不太熟悉结果没写MASK=0xFFFFFFFF想了很久是不是leetcode 出问题不包含边界了
以下是代码:
class Solution:
def reverse(self, x: int) -> int:
MAX = 0x7FFFFFFF
MIN = 0x80000000
MASK = 0xFFFFFFFF
#int->str should pay attention to negative number
flag = False
if x < 0:
flag = True
x = -x
inputNumStr = str(x)
outputNumStr = []
for i in range(len(inputNumStr)):
outputNumStr.append(inputNumStr[-i-1])
outputNumStr = ''.join(outputNumStr)
outputNum = int(outputNumStr)
if outputNum > MAX and flag == False:
return 0
if flag:
outputNum = -outputNum
if (outputNum&MASK) < MIN: #complement
return 0
return outputNum
## 重看博客的时候发现代码发成错了,改了一下 ##
用字符串真是牺牲空间换时间。
看Discuss 看到了一些有趣的:
(相同思想人家的好简洁)
class Solution:
def reverse(self, x):
s=1 if x >0 else -1
x=x*s
strx=str(x)
rst=int((strx[0:])[::-1])
return rst*s*(rst<0x7FFFFFFF)
另一种解法就是直接算:
class Solution:
def reverse(self, x):
if x < 0: return -self.reverse(-x)
result = 0
while x > 0:
result = result * 10 + x % 10
x = int(x/10)
return 0 if result > 0x7FFFFFFF else result
但是这种用时和空间复杂度都没我自己写的好。。。