整数反转
题目:给出一个 32 位的有符号整数,你需要将这个整数中每位上的数字进行反转。
示例 1: 输入: 123
输出: 321
示例 2: 输入: -123
输出: -321
示例 3: 输入: 120
输出: 21
注意: 假设我们的环境只能存储得下 32 位的有符号整数,则其数值范围为 [−231, 231 − 1]。请根据这个假设,如果反转后整数溢出那么就返回 0。
来源:https://leetcode-cn.com/problems/reverse-integer/
法一:自己的代码
特点:内存大,耗时短
思路:先判断正负并记录,再将int转为string删除末尾的0,对其进行分割后反序,最后转为int,加上符号输出
class Solution:
def reverse(self, x: int) -> int:
if x == 0:
return 0
else:
if x >= 0:
sign = 1
else:
sign = -1
x = abs(x)
# 去掉末尾的0
x = str(x).rstrip('0')
def fenge(element):
return element
# 分割 反转 连接
x_list = list(map(fenge, x))
x_list.reverse()
x_afterreverse = ''.join(x_list) # join函数用于连接list中的字符串
# print(x_afterreverse)
# print(x_list)
# print(type(x_afterreverse))
x_afterreverse = int(x_afterreverse)
if ( x_afterreverse > 2 ** 31) or ( x_afterreverse <= -2 ** 31):
print('绝对值太大了')
return 0
else:
return x_afterreverse * sign
if __name__ == '__main__':
duixiang = Solution()
ww = duixiang.reverse(0)
print('结果是:', ww)
法二:思路同法一,但很简洁
思路:先利用切片对字符串进行反转,并去掉负号,再对其判断是否超返回,并返回结果。
class Solution(object):
def reverse(self, x: int) -> int:
s = str(x)[::-1].rstrip('-') # 如果有负号去掉负号变为正数
print(s)
print(type(s))
if int(s) < 2 ** 31:
if x >= 0:
return int(s)
else:
return 0 - int(s)
return 0
if __name__ == '__main__':
duixiang = Solution()
kk = duixiang.reverse(-4556635)
print(kk)