LeetCode7:整数反转

给出一个 32 位的有符号整数,你需要将这个整数中每位上的数字进行反转。

示例 1:

输入: 123
输出: 321
示例 2:

输入: -123
输出: -321
示例 3:

输入: 120
输出: 21
注意:

假设我们的环境只能存储得下 32 位的有符号整数,则其数值范围为 [−231, 231 − 1]。请根据这个假设,如果反转后整数溢出那么就返回 0。

class Solution:
    def reverse(self, x: int) -> int:
        result = []
        #先取x得绝对值,统一视为正整数。(负数只要在最后输出之前加负号就可以了)
        x_true = abs(x)
        #将整型转化为字符串然后转化为列表
        x_t = list(str(x_true))
        n = len(x_t)
        #倒序遍历列表
        for i in range(1,n+1):
            j = x_t[-i]
            #倒叙读取第一步:也就是列表的最后一个元素等于0的话就跳过
            if i == 1 and j == 0:
                pass
            #其余情况直接倒序读取到的元素添加进result列表中
            else:
                result.append(j)
        
        # 连接字符串并转化成整型(join方法更高效,只占用一次内存)
        re = ''.join(result)
        r = int(re)
        #此时判断读入的数字是正数还是负数,如果是负数就加负号
        if x<0:
            r = 0-r
        #判断结果是否会溢出
        m = 2**31
        if -m <= r <= m-1:
            return r
        else:
            return 0
        

执行用时:60ms

class Solution:
    def reverse(self, x: int) -> int:
        #先取x得绝对值,统一视为正整数。(负数只要在最后输出之前加负号就可以了)
        x_true = abs(x)
        result = 0
        #直接对数字进行循环操作
        while x_true!=0:
            #中间值:对x_true取模(余数),得到的就是个位数
            temp = x_true%10
            #将原来的result乘以10(左移)再加上得到的个位数
            result = result*10 + temp
            #将原数减去个位数之后除以10得到处理之后的数,并将浮点数转为整型
            x_true = int(x_true/10)
            x_true = x_true//10
        #判断输入的正负
        if x<0:
            result = -result         
        
        #判断结果是否会溢出
        m = 2**31
        if -m <= result <= m-1:
            return result
        else:
            return 0

运行用时:60ms

猜你喜欢

转载自blog.csdn.net/hengaheng/article/details/89737263
今日推荐