_david李dvd

导航

Python版[leetcode]7. 整数反转(难度简单)

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

示例 1:

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

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

输入: 120
输出: 21
注意:

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

 

这道题可以用到python的字符串反转[::-1],非常方便,只要处理一下溢出以及负数即可

class Solution:
    def reverse(self, x: int) -> int:
        if x < 0:
            x = 0-int(str(0-x)[::-1])
        else:
            x = int(str(x)[::-1])
        return x if abs(x)< 2147483648 else 0

当然因为python操作方便讨巧了,实际算法应该是要用到类似栈的思想,栈先进后出,在栈顶做插入和删除操作

class Solution:
    def reverse(self, x: int) -> int:
        """
        :type x: int
        :rtype: int
        """
        x_list = list(str(x))
        res_stack = []
        is_minus = False  # 用于处理负数
        
        while x_list:
            v = x_list.pop()
            if v == '-':
                is_minus = True
                continue
            res_stack.append(v)
        res = int(''.join(res_stack))
        
        if is_minus:
            res *= -1
        
        # 边界条件
        v_max = 0xffffffff/2
        if res > (v_max -1) or res < (v_max*(-1)):
            res = 0
            
        return res

这里使用list来模拟栈,用pop来选择最后一个元素加入到新的list中

 

posted on 2020-02-01 22:09  _david李dvd  阅读(210)  评论(0编辑  收藏  举报