给定一个 32 位有符号整数,将整数中的数字进行反转。
(1)运用JavaApi 中StringBuffer自带的反转reverse方法可以完成,当出现int越界异常时,返回0即可;
class Solution {
public int reverse(int x) {
StringBuffer buf = new StringBuffer(String.valueOf(x));
if (buf.charAt(0) == '-') {
buf.deleteCharAt(0);
buf.reverse();
try {
return Integer.parseInt("-" + buf.toString());
} catch(NumberFormatException e1) {
return 0;
}
}
buf.reverse();
try {
return Integer.parseInt(buf.toString());
} catch (NumberFormatException e2) {
return 0;
}
}
}
(2)官方解答,就是将原数据从后开始取出,然后放到新数里面,从开开始,完成反转,并对零界点进行判断,如果越界则返回0;
class Solution {
public int reverse(int x) {
//存放结果
int rev = 0;
while (x != 0) {
//每次取最后一位数
int temp = x % 10;
//每次取完最后一位后将其去掉
x /= 10;
//溢出零界点判断 范围[-2^31 , 2^31 -1] 即 [-2147483648,2147483647]
if (rev > Integer.MAX_VALUE / 10 || (rev == Integer.MAX_VALUE / 10 && temp > 7))
return 0;
if (rev < Integer.MIN_VALUE / 10 || (rev == Integer.MIN_VALUE / 10 && temp < -8))
return 0;
rev = rev * 10 + temp;
}
return rev;
}
}