题目:
给出一个 32 位的有符号整数,你需要将这个整数中每位上的数字进行反转。
示例 1:
输入: 123
输出: 321
示例 2:
输入: -123
输出: -321
示例 3:
输入: 120
输出: 21
注意:
假设我们的环境只能存储得下 32 位的有符号整数,则其数值范围为 [−231, 231 − 1]。请根据这个假设,如果反转后整数溢出那么就返回 0。
python解法:
class Solution(object):
def reverse(self, x):
"""
:type x: int
:rtype: int
"""
if x==0:
return 0
flag=True
if x<0:
x=-x
flag=False
rev=0
while(x!=0):
pop=x%10
x=int(x/10)
if rev>int((2**31)/10):
return 0
if flag==True and rev==2**30 and pop>7:
return 0
if flag==False and rev==2*30 and pop>8:
return 0
rev=rev*10+pop
if flag==True:
return rev
else:
return -rev
思路:
python里负数取余的结果很奇怪,索性就把负数转成正数反转以后再加上负号,用一个flag做符号的标记。使用rev变量作为反转后的数,初始为0,每次从原来的数从后向前取一个数,加到rev后面。边界条件判断的话,中间要加一个判断,当rev等于(2^31/10)或者(-2 ^31/10)的时候,要判断加上最后一位是否会溢出,即判断pop是否大于7(x为正数)或者是否小于-8(x为负数)。