题目
给出一个 32 位的有符号整数,你需要将这个整数中每位上的数字进行反转。
思路
1.①判断正负,如果x为负数则记录下来并把值改为正数。
②接下来将取x的个位数的值存入数组内记录下来,并在每次记录时去掉记录下来的个位数,就会获得反转原来数的数组
③获得最大位数
④遍历反转数组并使每次遍历的数字与其对应的位数相乘
class Solution:
def reverse(self, x: int) -> int:
NUMS=[]
RESULT=0
MINUS=1
if x<0:
MINUS=-1
x=x*-1
while(x/10!=0):
NUMS.append(x%10)
x=int(x/10)
MAX=1
for i in range(len(NUMS)-1):
MAX=MAX*10
for i in range(len(NUMS)):
RESULT=int(RESULT+NUMS[i]*MAX)
MAX=MAX/10
if RESULT*MINUS>2**31-1 or RESULT*MINUS<-(2**31):
return 0
return RESULT*MINUS
2.因为231和231-1是个固定的数,那么设置为常量,减少计算量
class Solution:
def reverse(self, x: int) -> int:
NUMS=[]
RESULT=0
MINUS=1
if x<0:
MINUS=-1
x=x*-1
while(x/10!=0):
NUMS.append(x%10)
x=int(x/10)
MAX=1
for i in range(len(NUMS)-1):
MAX=MAX*10
for i in range(len(NUMS)):
RESULT=int(RESULT+NUMS[i]*MAX)
MAX=MAX/10
if RESULT*MINUS>2147483646 or RESULT*MINUS<-2147483647:
return 0
return RESULT*MINUS
3.整合判断和赋值
class Solution:
def reverse(self, x: int) -> int:
NUMS=[]
RESULT=0
MINUS=1
if x<0:
MINUS=-1
x=x*-1
while(x>0):
RESULT=RESULT*10+x%10
x=int(x/10)
if RESULT*MINUS>2147483646 or RESULT*MINUS<-2147483647:
return 0
return RESULT*MINUS