1.Description
Given a 32-bit signed integer, reverse digits of an integer.
Note:
Assume we are dealing with an environment that could only store integers within the 32-bit signed integer range: [−231, 231 − 1]. For the purpose of this problem, assume that your function returns 0 when the reversed integer overflows.
2.Example
Input: x = 120
Output: 21
3.Solution
1.使用Java的方法(时间空间复杂度都不好)
String reversed = new StringBuilder().append(Math.abs(x)).reverse().toString();
try {
return (x < 0) ? Integer.parseInt(reversed) * -1 : Integer.parseInt(reversed);
} catch (NumberFormatException e) {
return 0;
}
2.数学方法
当rev = rev10+pop;时,可能导致溢出,因此我么需要提前检验是否溢出。如果rev = rev10+pop溢出,则有rev>=MAX_VALUE/10,所以:
1.如果rev>MAX_VALUE/10,则必有溢出(注意是整数的除号,不满10的直接省略)
2.如果rev==MAX_VALUE/10,则当pop>=7或者pop<=-8时有溢出.
class Solution {
public int reverse(int x) {
int rev = 0;
while (x != 0) {
int pop = x % 10;
x /= 10;
//rev判断是否超过边界,或者rev的前一位
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;
}
}
3.数学
class Solution {
public int reverse(int x) {
long temp = 0;
while(x != 0){
int pop = x % 10;
temp = temp * 10 + pop;
if(temp > Integer.MAX_VALUE || temp < Integer.MIN_VALUE){
return 0;
}
x /= 10;
}
return (int)temp;
}
}