【每日一题】LeetCode 7.整数反转(数学)
题目描述
给定一个 32 位的有符号整数 x
,编写一个函数,将 x
中的数字部分反转。如果反转后的整数超出了 32 位有符号整数的范围 [-2^31, 2^31 - 1]
,则返回 0。假设环境不允许存储 64 位整数。
思路分析
- 处理正负号 :首先判断输入的整数
x
是否为 0,如果是,则直接返回 0。接着,将x
转换为绝对值,以便后续处理正整数。 - 转换为字符串:将绝对值的整数转换为字符串,这样可以方便地进行反转操作。
- 反转字符串 :使用
StringBuffer
的reverse
方法将字符串中的数字顺序反转。 - 转换回整数:将反转后的字符串转换回整数。
- 判断范围:检查反转后的整数是否在 32 位有符号整数的范围内。如果不在范围内,返回 0。
- 处理正负:根据原始整数的正负,返回相应的正数或负数结果。
输入示例
- 示例 1:输入
x = 123
,输出321
。 - 示例 2:输入
x = -123
,输出-321
。 - 示例 3:输入
x = 120
,输出21
。 - 示例 4:输入
x = 0
,输出0
。
代码实现
java
class Solution {
public int reverse(int x) {
// 判断是否为0,直接返回0
if (x == 0) {
return 0;
}
// 将x转换为绝对值,以便后续处理
long temp = Math.abs((long) x);
// 将绝对值转换为字符串
String str = Long.toString(temp);
// 使用StringBuffer进行字符串反转
StringBuffer string = new StringBuffer(str);
// 反转字符串
string.reverse();
// 将反转后的字符串转换回整数
long res = Long.parseLong(string.toString());
// 判断反转后的整数是否在32位有符号整数的范围内
if (res > Integer.MAX_VALUE || res < Integer.MIN_VALUE) {
return 0;
} else {
// 根据原始整数的正负,返回相应的正数或负数结果
return (x > 0) ? (int) res : (int) -res;
}
}
}