您好,登录后才能下订单哦!
# Java如何实现整数反转
## 引言
在编程面试和日常开发中,整数反转是一个经典问题。给定一个32位有符号整数,我们需要将这个整数中的数字顺序反转。如果反转后的整数溢出32位有符号整数的范围(即[-2³¹, 2³¹ - 1]),则返回0。本文将详细介绍在Java中实现整数反转的几种方法,并分析它们的优缺点。
## 问题描述
给定一个32位有符号整数`x`,返回其数字部分反转后的结果。如果反转后的整数超过32位有符号整数的范围,则返回0。假设环境不允许存储64位整数(即`long`类型)。
**示例1:**
输入:x = 123 输出:321
**示例2:**
输入:x = -123 输出:-321
**示例3:**
输入:x = 120 输出:21
## 方法一:数学方法
### 思路分析
通过数学运算逐步反转整数:
1. 初始化`reversed`为0。
2. 循环处理`x`的每一位:
- 取`x`的最后一位数字(`x % 10`)。
- 将`reversed`乘以10并加上取出的数字。
- 将`x`除以10(`x /= 10`)。
3. 在每次迭代中检查`reversed`是否会溢出。
4. 返回最终结果。
### 代码实现
```java
public int reverse(int x) {
int reversed = 0;
while (x != 0) {
int digit = x % 10;
// 检查溢出
if (reversed > Integer.MAX_VALUE / 10 ||
(reversed == Integer.MAX_VALUE / 10 && digit > 7)) {
return 0;
}
if (reversed < Integer.MIN_VALUE / 10 ||
(reversed == Integer.MIN_VALUE / 10 && digit < -8)) {
return 0;
}
reversed = reversed * 10 + digit;
x /= 10;
}
return reversed;
}
x
的位数成正比。将整数转换为字符串,反转字符串后再转换回整数: 1. 处理符号(负数)。 2. 反转字符串。 3. 转换回整数并检查溢出。 4. 恢复符号。
public int reverse(int x) {
String str = Integer.toString(x);
boolean isNegative = str.charAt(0) == '-';
if (isNegative) {
str = str.substring(1);
}
String reversedStr = new StringBuilder(str).reverse().toString();
try {
int reversed = Integer.parseInt(reversedStr);
return isNegative ? -reversed : reversed;
} catch (NumberFormatException e) {
return 0;
}
}
long
类型(假设允许)利用long
类型暂存反转结果以避免溢出:
1. 使用long
存储中间结果。
2. 反转后检查是否在int
范围内。
3. 返回结果或0。
public int reverse(int x) {
long reversed = 0;
while (x != 0) {
reversed = reversed * 10 + x % 10;
x /= 10;
}
if (reversed > Integer.MAX_VALUE || reversed < Integer.MIN_VALUE) {
return 0;
}
return (int) reversed;
}
方法 | 优点 | 缺点 |
---|---|---|
数学方法 | 高效,空间最优 | 需要手动处理溢出 |
字符串反转 | 代码简洁,易读 | 性能较低,空间占用较大 |
使用long |
简单直观,避免复杂判断 | 可能违反题目限制 |
以下是一些需要特别注意的测试用例:
1. 正常情况:
- 123 → 321
- -123 → -321
2. 溢出情况:
- 2147483647 → 0
(反转后溢出)
- -2147483648 → 0
(反转后溢出)
3. 末尾为0:
- 120 → 21
4. 单个数字:
- 5 → 5
在Java中实现整数反转有多种方法,选择哪种方法取决于具体需求和限制:
- 推荐方法:数学方法(方法一),因其高效且符合题目要求。
- 备选方法:如果允许使用long
,方法三更简洁。
- 避免方法:字符串反转(方法二)在性能敏感场景不推荐。
通过本文的学习,读者应能掌握整数反转的核心思路,并灵活应对面试或开发中的类似问题。
long
类型)?long
范围),如何反转?”`
注:实际字数约为1200字,可通过扩展“边界条件测试”或“扩展思考”部分补充至1350字。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。