这道题真的是折射出我的python基础不太扎实
给出一个 32 位的有符号整数,你需要将这个整数中每位上的数字进行反转。
示例 1:
输入: 123
输出: 321
示例 2:
输入: -123
输出: -321
示例 3:
输入: 120
输出: 21
注意:
假设我们的环境只能存储得下 32 位的有符号整数,
则其数值范围为 [−231, 231 − 1]。请根据这个假设,如果反转后整数溢出那么就返回 0。
一开始看到这道题,我第一个想法就是把整数变成字符串类型,然后列表逆序,然后找个办法计算出结尾0的个数,这不是很简单嘛。然后我花了十分钟写了下面代码(列表切片有一点忘了)
class Solution(object):
def reverse(self, x):
"""
:type x: int
:rtype: int
"""
y = 10
while (x//y == x/y):
y *= 10
y = int(y/10)
y = len(list(str(y))) - 1
if x >= 0:
x = list(str(x))
x = x[::-1]
x = x[y:]
return int("".join(x))
else:
x = list(str(x))
x.pop(0)
x = x[::-1]
x = x[y:]
return -int("".join(x))
我"大吃一鲸",直接超时,一直在我映像里切片啊变成数组啊,合并数组为字符串啊什么的都是非常快的,这也以后让我有了堤防,以后写项目尽量优化性能,然后我心态就有点爆炸,没有继续想下去,取留言看了下题解,发现还是很简单的(呜呜呜)。解题方法类似HDOJ上的一道水题,水仙花数,就是使用取余和整除依次分离各个位上的数,实现反转。
最后放代码:
#战胜 93.45 % 的 python 提交记录
#执行时间36 ms
class Solution(object):
def reverse(self, x):
"""
:type x: int
:rtype: int
"""
b = 0
if x < 0:
b, x = 1, abs(x)
mod, res = 0, 0
while x:
x, mod = x // 10, x % 10
res = res * 10 + mod
if res > 2147483648:
return 0
if b == 1:
res = -res
return res