给你一个 32 位的有符号整数 x
,返回将 x
中的数字部分反转后的结果。
如果反转后整数超过 32 位的有符号整数的范围 [−231, 231 − 1]
,就返回 0。
假设环境不允许存储 64 位整数(有符号或无符号)。
解题思路:数学逻辑,利用取余依次将最后一个数存入StringBuffer,然后除10。
我写的代码如下:
class Solution {
public int reverse(int x) {
if (x == 0) {
return x;
}
StringBuilder ans = new StringBuilder();
if (x < 0) {
ans.append("-");
x = Math.abs(x);
}
while (x > 0) {
ans.append(x % 10);
x /= 10;
}
long reversed = Long.parseLong(ans.toString());
if (reversed > Integer.MAX_VALUE || reversed < Integer.MIN_VALUE) {
return 0;
}
return (int) reversed;
}
}
但是运行的测试案例都可以通过,但提交后报错:
我目前为止还没发现原因。
参考答案:
class Solution {
public int reverse(int x) {
int rev = 0;
while (x != 0) {
if (rev < Integer.MIN_VALUE / 10 || rev > Integer.MAX_VALUE / 10) {
return 0;
}
int digit = x % 10;
x /= 10;
rev = rev * 10 + digit;
}
return rev;
}
}