LeetCode算法题7:反转整数

给定一个 32 位有符号整数,将整数中的数字进行反转。
示例1:

输入: 123
输出: 321

示例2:

输入: -123
输出: -321

示例3:

输入: 120
输出: 21

注意:
假设我们的环境只能存储 32 位有符号整数,其数值范围是 [−231, 231 − 1]。根据这个假设,如果反转后的整数溢出,则返回 0。
这个题目实在不能太简单,记得刚学c语言的时候就做过这个题,但是这里多加了限制条件,那就是32位的数,是有边界的,所以只要设置好边界就可以,但是还要注意一点,环境只能存储32位有符号整数,所以不能等溢出了再判断是不是溢出,只能之前判断。
C++代码如下:

class Solution {
public:
    int reverse(int x) {
        int rev = 0;
        while(x!=0)
        {
            int pop = x % 10;
            x = x / 10;
            if((rev > INT_MAX/10) || (rev == INT_MAX/10 && pop > 7))
                return 0;
            if((rev < INT_MIN/10) || (rev == INT_MIN/10 && pop < -8))
                return 0;
            rev = rev * 10 + pop;
        }
        return rev;
    }
};

python3代码如下:

class Solution:
    def reverse(self, x):
        """
        :type x: int
        :rtype: int
        """
        if x < 0:
            x = -x
            neg = True
        else:
            neg = False
        rev = 0
        while x != 0:
            pop = x % 10
            x = x // 10
            if rev > (2**31-1)/10:
                return 0
            if rev == (2**31-1)//10 and pop > 7:
                return 0
            if rev < -(2**31)//10:
                return 0
            if rev == -(2**31)//10 and pop < -8:
                return 0
            rev = rev * 10 + pop
        if neg == True:
            rev = -rev
        return rev

这里注意一下,python3的代码加了正负数的判断,这是因为//号是在除完之后取不大于除完之后的数的最大整数,所以在负数相除的时候x永远不会为零,而是-1,所以程序不会停止,这里其实也可以在while判断中加上 x!=-1来避免这个问题。但是还有其他的问题,那就是python中对负数取余也是向上取的,也就是说-7%3结果是-3余2,所以这样取余出来的数就不是我们预期的值,需要更多的判断。因此上面的程序应该是比较简单的了。

猜你喜欢

转载自blog.csdn.net/x603560617/article/details/83276082