Problem
给定32位有符号整数,整数的反向数字。
例1:
输入: 123
输出: 321
例2:
输入: -123
输出: -321
例3:
输入: 120
输出: 21
注意:
假设我们正在处理一个只能在32位有符号整数范围内存储整数的环境:[ - 21^31, 2^31 - 1]。
出于此问题的目的,假设当反向整数溢出时,函数返回0。
Alogrithmic thinking
我们可以一次建立一个反向整数。在这样做的同时,我们可以事先检查是否附加另一个数字会导致溢出。
算法
反转整数可以与反转字符串类似地完成。
Python3 solotion
solution 1
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
7. Reverse Integer
给定32位有符号整数,整数的反向数字。
例1:
输入: 123
输出: 321
例2:
输入: -123
输出: -321
例3:
输入: 120
输出: 21
"""
class Solution:
def reverse(self, x):
"""
: type x: int
: rtype: int
"""
if x < 0:
number = int("-" + str(abs(x))[::-1]) # [::-1]表示反转字符串
else:
number = int(str(abs(x))[::-1])
if number > (2 ** 31 - 1) or number < -(2 ** 31): # 溢出返回0
return 0
return number
if __name__ == '__main__':
num = -123
result = Solution().reverse(num)
print(result)
solution 2
class Solution2:
def reverse(self, x):
"""
:type x: int
:rtype: int
"""
sign = lambda x: x and (1, -1)[x < 0]
r = int(str(sign(x)*x)[::-1])
return (sign(x)*r, 0)[r > 2**31 - 1]
or
class Solution3(object):
def reverse(self, x):
s = (x > 0) - (x < 0)
r = int(str(x*s)[::-1])
return s*r * (r < 2**31)
48ms解决方案:
class Solution4:
def reverse(self, x):
sign = -1 if x <= 0 else 1
ans = int(str(sign*x)[::-1])
return ans*sign if ans < 2**31 else 0