专门把这道溢出的题目写一遍,是因为我发现很多解法都存在一定的问题。
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