java版直观解法:
class Solution {
public int reverse(int x) {
int rev = 0;
while (x != 0) {
int pop = x % 10;
x /= 10;
if (rev > Integer.MAX_VALUE/10 || (rev == Integer.MAX_VALUE / 10 && pop > 7)) return 0;
if (rev < Integer.MIN_VALUE/10 || (rev == Integer.MIN_VALUE / 10 && pop < -8)) return 0;
rev = rev * 10 + pop;
}
return rev;
}
}
python
python负数取余操作与java不同,由于python的//
操作是向下取整,导致正负数取余操作结果不一致,因此需要将原数字转为正数操作。
class Solution(object):
def reverse(self, x):
"""
:type x: int
:rtype: int
"""
res = 0
y = abs(x)
ub = (1 << 31) - 1 if x > 0 else 1 << 31
while y != 0:
res = res * 10 + y % 10
if res > ub:
return 0
y //= 10
return res if x > 0 else -res
位运算那里没有写括号,就先算了减法,运算的优先级 不对