题目描述:给你一个 32 位的有符号整数 x ,返回将 x 中的数字部分反转后的结果。
如果反转后整数超过 32 位的有符号整数的范围 [−231, 231 − 1] ,就返回 0。
假设环境不允许存储 64 位整数(有符号或无符号)。
示例1:
输入:x = 123 输出:321
示例2:
输入:x = -123 输出:-321
示例3:
输入:x = 120 输出:21
解题思路1:使用 Java 提供的 String 和 Integer 的一些方法,通过转换成字符串之后再处理,代码如下:
String s = String.valueOf(x);
// 判断是否为负数
boolean isNegative = false;
if (s.charAt(0) == '-') {
isNegative = true;
s = s.substring(1);
}
// 数字反转
s = new StringBuilder(s).reverse().toString();
s = isNegative ? "-" + s : s;
try {
// 数字转换
return Integer.parseInt(s);
} catch (Exception e) {
return 0;
}
首先将待反转的 int 类型的数值 x 转换为 String 类型的字符串 s,然后去判断 s 是否带 “-” 号,如果带,则认为待反转数值 x 为负数,此时需要将 s 的 “-” 号去掉进行 reverse() 反转操作,反转之后将负数的 “-” 再重新加上,然后进行 String 转 Integer 的操作,如果转换过程中超出 Integer 所表示的数值范围(x > 2147483647 || x < -2147483648)了,则直接 catch 异常之后 return 0 即可。
解题思路二:使用 Long 类型的中间值来存储反转后的值,之后再强转回 int 返回。
long result = 0;
while (x != 0) {
result = result * 10 + x % 10;
x = x / 10;
}
if (result > 2147483647 || result < -2147483648) {
return 0;
} else {
return (int)result;
}
这种 x = x / 10 的反转数字的方式很常见,望牢记!