整数反转问题--正确率极低

专门把这道溢出的题目写一遍,是因为我发现很多解法都存在一定的问题。

1.首先题目要求只能用32位有符号整数存储,所以不能用long长整型。

2.还有些解答用了abs绝对值处理。但需要考虑最小的负数取绝对值后会比最大的正数多1。所以要在取绝对值之前加一个判断语句。

JAVA

class Solution {
    public int reverse(int x) {
        int sign = x < 0 ? -1 : 1;
        if(x == Integer.MIN_VALUE) return 0;
        x = Math.abs(x);
        int res = 0;
        while (x > 0) {
            if(res > (Integer.MAX_VALUE-x%10)/10)
                return 0;
            res = res * 10 + x % 10;
            x /= 10;
        }
        return sign*res;
    }
}

附上Python代码

class Solution:
    def reverse(self, x: int) -> int:
        """
        :type x: int
        :rtype: int
        """
        x = int(str(x)[::-1]) if x >= 0 else - int(str(-x)[::-1])
        return x if x < 2147483648 and x >= -2147483648 else 0
原文地址:https://www.cnblogs.com/yawenw/p/12862378.html