给你一个 32 位的有符号整数 x ,返回将 x 中的数字部分反转后的结果。
如果反转后整数超过 32 位的有符号整数的范围 [−231, 231 − 1] ,就返回 0。
假设环境不允许存储 64 位整数(有符号或无符号)。
示例 1:
输入:x = 123
输出:321
示例 2:
输入:x = -123
输出:-321
示例 3:
输入:x = 120
输出:21
示例 4:
输入:x = 0
输出:0
提示:
-231 <= x <= 231 - 1
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/reverse-integer
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
解法一
public int reverse_1(int x) {
//当x为0或者x超出取值范围时直接返回0
if (x == 0 || x > Integer.MAX_VALUE || x < Integer.MIN_VALUE) {
return 0;
} else {
String strNum = Integer.toString(x);
StringBuilder sb = new StringBuilder();
for (int i = strNum.length() - 1; i >= 0; i--) {
//当出现负号时,结束本次循环,不将负号存入StringBuilder,方便使用Integer.parseInt进行解析
if (strNum.charAt(i) == '-') {
continue;
}
sb.append(strNum.charAt(i));
}
Integer integer = null;
try {
integer = Integer.parseInt(sb.toString());
} catch (NumberFormatException e) {
return 0;
}
if (x > 0) {
return integer;
} else {
return -integer;
}
}
}
解法二
public int reverse_2(int x) {
//int数值的最大取值
int max = Integer.MAX_VALUE;
//int数值的最小取值
int min = Integer.MIN_VALUE;
//用long类型来判断是否溢出
long rs = 0;
//取模操作可以拿到最后一位数 , rs = rs * 10 + x % 10 的作用就是拿到反转之后的值
//x /= 10 的作用是取出x中的每一位数同时控制循环的次数
while (x != 0) {
rs = rs * 10 + x % 10;
System.out.print("rs == " + rs);
x /= 10;
System.out.println(" x == " + x);
}
if (rs > max || rs < min) {
return 0;
} else {
return Integer.parseInt(rs + "");
}
}