[Leetcode7]反转整数

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

python:

class Solution(object):
    def reverse(self, x):
        """
        :type x: int
        :rtype: int
        """
        xStr = str(x)
        xLen = len(xStr)
        if xLen == 0:
            return 0
        elif xLen == 1:
            return x
        else:
            start = xLen - 1
            y = ""
            while xStr[start] == "0" and start>=0:
                start -= 1
            if start<0:
                return 0
            else:
                while start>0:
                    y += xStr[start]
                    start -=1
                if xStr[0] == "-":
                    y = "-" + y
                else:
                    y += xStr[0]
                y = int(y)
                if y>(2**31-1) or y<(-2**31):
                    return 0
                else:
                    return y

C++: 

class Solution {
public:
    int reverse(int x) {
        double y = 0;
        if(x>=0){
            while(x){
                int val = x % 10;
                y = y * 10 + val;
                if(y>(pow(2,31)-1)){
                    y = 0;
                    break;
                }
                else{
                    x /= 10;
                }
            }
        }
        else if(x<0){
            x = -x;
            while(x>0){
                int val = x % 10;
                y = y * 10 + val;
                if(y>(pow(2,31))){
                    y = 0;
                    break;
                }
                else{
                    x /= 10;
                }
            }
            y = -y;
        }
        return static_cast<int>(y);
    }
};

 C++代码一开始总是在输入为-2147483648时输出-2147483648,而不是输出溢出值。我将负数的情况下里的while判断从x改为x>0解决了问题。

下面是参考别人的代码,很简洁也很高效:

class Solution {
public:
    int reverse(int x) {
        double y=0;
        for(;x;x/=10){
            y = y*10 + x%10;
        }
        if(y>INT_MAX || y<INT_MIN) return 0;
        return y;
    }
};

猜你喜欢

转载自blog.csdn.net/qq_40501689/article/details/82788509