代码改变世界

LeetCode No.7 Reverse Integer 2017/3/27

2017-03-27 01:58  方小呆dai  阅读(140)  评论(0编辑  收藏  举报

Reverse digits of an integer.

Example1: x = 123, return 321
Example2: x = -123, return -321

click to show spoilers.

Note:
The input is assumed to be a 32-bit signed integer. Your function should return 0 when the reversed integer overflows.

 

Subscribe to see which companies asked this question.

 
题目大意:返回一个数的逆置数,并且如果逆置后发生溢出时返回0
解题思路:首先判断x是正数还是负数,用sign等于1或者-1来保存x的符号,然后当x是负数的时候把它先变为正数。x=0的情况并到后面直接返回0。用rex保存将要返回的数,每次循环只要当前x不为0,就把rex的每个位上的数都往左移一位(即将rex乘以10)并将x的最低位添加到rex的最低位(加上x除以10求余),然后将x的最低位丢掉(x/=10)。输出结果前对rex进行判断,若溢出就直接输出0,否则把逆置后的rex乘上符号sign得到输出结果。
在编程过程中犯了个低级错误,一开始由于把x分成正数负数和0,我就用了三个if语句,后来把0的情况删掉了,但是正负数分别用了if来判断,先判断x是负数的话就将sign标记为-1,然后将x变为正数,结果后面判断x如果是正数的话又把sign变成了1,所以当输入负数的时候结果一直是正数的逆置。。实在是太愚蠢了。最后改成先判断是正数再判断是负数,就不会出现将负数x变为正数后影响了sign值。

class Solution:
def reverse(self, x):
"""
:type x: int
:rtype: int
"""
sign = 0
if (x > 0):
sign = 1
if (x < 0):
sign = -1
x = x * -1
rex = 0
while (x != 0):
rex = rex * 10 + x % 10
x /= 10
if rex > 2 ** 31 -1:
return 0
else:
return rex * sign