leedcode刷题——整数反转

给你一个 32 位的有符号整数 x ,返回 x 中每位上的数字反转后的结果。

如果反转后整数超过 32 位的有符号整数的范围 [−231, 231 − 1] ,就返回 0。
示例 1:

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

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

输入:x = 120
输出:21
示例 4:

输入:x = 0
输出:0

1.简单解法
1.判断x的大小,对于负值将其转化为正值,待其反转后再将再填负号
2.将整数转化为字符串
3.通过[::-1]进行反转
4.范围认定,注意:要求的是reverse之后再进行判断而不是之前的x值是否在范围中。

class Solution(object):
    def reverse(self, x):
        """
        :type x: int
        :rtype: int
        """
        if x==0:
            return x
        if x<0:
            x=-x
            str_x=str(x)
            str_x=str_x[::-1]
            x=int(str_x)
            x=-x 
            if x<=-2**31:
                return 0
            else:
                return x
        if x>0:
            str_x=str(x)
            str_x=str_x[::-1]
            x=int(str_x)
            if x>=2**31-1:
                return 0
            else:
                return x 

2.优化解法
1.将x的绝对值存入y
2.反复“弹出”y的最后一位,将其”推入“res的后面
3.在这样做的时候,我们可以预先检查向原整数附加另一位数字是否会导致溢出。

class Solution(object):
    def reverse(self, x):
        """
        :type x: int
        :rtype: int
        """
        y,res=abs(x),0
        boundary=1<<31 if x<0 else (1<<31)-1
        while y!=0:
            res=res*10+y%10
            if res>boundary:
                return 0
            y//=10
        return res if x>0 else -res

python中的左移和右移:
左移、右移是指:在二进制中,将1向左、向右移动的位数,返回的是将二进制数转换为十进制数的结果。

公式: a<<b 等价于 a*(1<<b),而(1<<b)的结果是二进制数: 100…00 (共b个0,表示将1向左移动b位),对应的十进制结果是:2^{b}

示例: 3<<5 = 3*2^{5} = 96

使用左移右移操作,可以提升计算速度。

上一篇:LeedCode 213. 打家劫舍 II


下一篇:leedCode 4寻找两个正序数组的中位数