您的位置:首页 > 编程语言 > Python开发

leetcode-07-reverse integer-python

2016-04-01 11:35 585 查看
Reverse digits of an integer.

反转一个数,注意符号,溢出范围。题目说的是32位int。

自己的思路:转换成list,先拿出符号,然后不断pop掉的字符加在一起最后如果没溢出就输出。感觉很妙,像堆栈的感觉。

class Solution(object):
def reverse(self, x):
"""
:type x: int
:rtype: int
"""
y=list(str(x))
z=""
if '-' in y:
z+='-'
y.remove('-')
for i in range(len(y)):
z+=y.pop()
return int(z) if abs(int(z))<=math.pow(2, 31) else 0


测试通过,很慢。效率低。

看到有一个简洁的。

class Solution:
# @return an integer
def reverse(self, x):
revx = int(str(abs(x))[::-1])
if revx > math.pow(2, 31):
return 0
else:
return revx * cmp(x, 0)


思路差不多,就是用了字符串[::-1]这个直接反转字符串。

a="hello"
b=a[::-1]
print(b)


结果:

olleh
Press any key to continue . . .


测试时间比我自己的代码还要长。。72ms vs 84ms。所以内置的一些功能简单方便但是不一定快。

还有一点就是范围溢出问题了。math.pow(a,b)返回a的b次幂。

unsigned int: 4294967295(2^32-1)
signed int: 2^31-1


有符号数所以是31次幂。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: