Reverse digits of an integer.
Example1: x = 123, return 321
Example2: x = -123, return -321Note:
The input is assumed to be a 32-bit signed integer. Your function should return 0 when the reversed integer overflows.
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