0007. Reverse Integer (E)
Reverse Integer (E)
题目
Given a 32-bit signed integer, reverse digits of an integer.
Example 1:
Input: 123
Output: 321
Example 2:
Input: -123
Output: -321
Example 3:
Input: 120
Output: 21
Note:
Assume we are dealing with an environment which could only store integers within the 32-bit signed integer range: \([-2^{31}, 2^{31}-1]\). For the purpose of this problem, assume that your function returns 0 when the reversed integer overflows.
题意
给定一个32位有符号整数,将其各位倒置后输出,如果倒置后超出int范围溢出则输出0。
思路
问题的关键在于对溢出数的处理。溢出后再与最值比较不可取,因此通过与最值/10比较来判断最后会不会溢出。int范围为[-2147483648, 2147483647]。
代码实现
Java
class Solution {
public int reverse(int x) {
int res = 0;
while (x != 0) {
int n = x % 10;
if ((res > Integer.MAX_VALUE / 10)
|| (res == Integer.MAX_VALUE / 10 && n > 7)) {
return 0;
} else if ((res < Integer.MIN_VALUE / 10)
|| (res == Integer.MIN_VALUE / 10 && n < -8)) {
return 0;
} else {
res = 10 * res + n;
}
x /= 10;
}
return res;
}
}
JavaScript
/**
* @param {number} x
* @return {number}
*/
var reverse = function (x) {
let minVal = -Math.pow(2, 31), maxVal = Math.pow(2, 31) - 1
let res = 0
while (x !== 0) {
let num = x % 10
if ((res > maxVal / 10 || res === Math.trunc(maxVal / 10) && num > 7) ||
(res < minVal / 10 || res === Math.trunc(minVal / 10) && num < -8)) {
return 0
}
res = res * 10 + num
x = Math.trunc(x / 10)
}
return res
}