public class Solution {
public int reverse(int x) {
int y = 0;
Boolean pm;
if ((x == (-2 << 30)) || (x == ((2 << 30) - 1)) || x == 0) {
return 0; // 取出输入值的绝对值时的边界条件(int取不到-2^31的绝对值),
// 另外部分特殊结果可以先返回
} else {
y = x > 0 ? x : -x; // 取得符合预期范围内输入值的绝对值用于后续步骤
pm = x > 0 ? true : false; // 判断输入值的正负
}
String temp0 = String.valueOf(y); // 把绝对值转成字符串
StringBuilder temp1 = new StringBuilder(temp0).reverse(); // 得到可变字符串并翻转
temp1 = !temp0.endsWith("0") ? temp1 : temp1.deleteCharAt(0);
// 根据数字最后一位是否是0,删除翻转后字符串首位的0
String temp2 = temp1+"";
// 转回字符串
long z = Long.valueOf(temp2); // 或者Long.parseLong(temp2);
// 使用long类型存储转回的数子,可能会超过int范围
if ((z < (-2 << 30)) || (z > ((2 << 30) - 1))) {
return 0;
}else{
if (pm){
return (int)z;
}else{
return -(int)z;
}
// 根据是否符合范围要求和输入值正负号返回结果
}
}
}
原题链接
https://leetcode-cn.com/problems/reverse-integer/
描述
给出一个 32 位的有符号整数,你需要将这个整数中每位上的数字进行反转。
示例 1:
输入: 123 输出: 321
示例 2:
输入: -123 输出: -321
示例 3:
输入: 120 输出: 21
注意:
假设我们的环境只能存储得下 32 位的有符号整数,则其数值范围为 [−2^31, 2^31 − 1]。请根据这个假设,如果反转后整数溢出那么就返回 0。