题目描述
代码
自己写的像屎山,虽然能通过,但多了很多不必要的代码。
class Solution {
public int reverse(int x) {
int count = 0;
int res = 0;
//用temp2记录x的正负
int temp2 = x;
if(x < 0){
x = -x;
}
int temp = x;
while(temp != 0){
temp = temp / 10;
count++;
}
while(x != 0 && count != 0){
int n = x % 10;
res += n * Math.pow(10,count - 1);
if(res < -Integer.MAX_VALUE || res > Integer.MAX_VALUE - 1) return 0;
count--;
x = x / 10;
}
if(temp2 < 0){
res = -res;
}
return res;
}
}
官方题解
class Solution {
public int reverse(int x) {
int res = 0;
while(x != 0){
if(res < Integer.MIN_VALUE / 10 || res > Integer.MAX_VALUE / 10) return 0;
int n = x % 10;
res = res * 10 + n;
x = x / 10;
}
return res;
}
}
因为题目要求判断反转后的整数有没有溢出,又要求不许存long型的数。那么我们就要在推入下一个数前,判断接下来会不会溢出。也就是:-2 ^ 31 <= res * 10 + n <= 2 ^ 31 - 1
again,我写的真像屎,常回来看看!