(算法06/Leetcode7)整数反转

题目

给出一个 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

在这里插入图片描述

发布了19 篇原创文章 · 获赞 4 · 访问量 517

猜你喜欢

转载自blog.csdn.net/zhuangww05/article/details/104819767