判断回文数的基本概念
在编程中,回文数是指正读和反读都相同的数字,例如121、1331、9889等,判断一个数字是否为回文数是Java开发中的常见问题,其核心思路是验证数字与其反转后的数字是否相等,需要注意的是,负数(如-121)不可能是回文数,因为其符号会导致反转后与原数不同;所有个位数为0的数字(除0本身外)也不可能是回文数,因为反转后前导0会被省略。

数字反转法
数字反转法是最直观的判断方式,通过将数字完全反转后与原数比较,判断是否为回文数,具体步骤如下:
- 处理特殊情况:首先排除负数和个位数为0的非零数字。
- 反转数字:通过取模运算(
% 10)获取数字的最后一位,并将其逐步添加到反转后的数字中,对于数字121,反转过程为:- 初始反转数为0,原数为121
- 第一次循环:反转数 = 0 * 10 + 1 = 1,原数 = 121 / 10 = 12
- 第二次循环:反转数 = 1 * 10 + 2 = 12,原数 = 12 / 10 = 1
- 第三次循环:反转数 = 12 * 10 + 1 = 121,原数 = 1 / 10 = 0
- 比较结果:反转后的数字与原数相等,则判定为回文数。
以下是Java代码实现:
public boolean isPalindrome(int x) {
if (x < 0 || (x % 10 == 0 && x != 0)) {
return false;
}
int reversed = 0;
while (x > reversed) {
reversed = reversed * 10 + x % 10;
x /= 10;
}
return x == reversed || x == reversed / 10;
}
该方法的时间复杂度为O(log n),空间复杂度为O(1),效率较高。
字符串反转法
另一种思路是将数字转换为字符串,再利用字符串的反转功能进行比较,这种方法代码简洁,但需要额外的字符串存储空间。

- 转换为字符串:使用
Integer.toString(x)或String.valueOf(x)将数字转为字符串。 - 反转字符串:通过
StringBuilder或StringBuffer的reverse()方法反转字符串。 - 比较字符串:反转后的字符串与原字符串相等,则判定为回文数。
Java代码实现如下:
public boolean isPalindrome(int x) {
String str = String.valueOf(x);
String reversedStr = new StringBuilder(str).reverse().toString();
return str.equals(reversedStr);
}
该方法的时间复杂度为O(n),空间复杂度为O(n),其中n为数字的位数,虽然代码易读,但效率略低于数字反转法。
双指针法
双指针法通过从字符串的两端向中间移动指针,逐位比较字符是否相同,适用于字符串形式的数字判断。
- 转换为字符串:将数字转为字符串,便于索引操作。
- 初始化指针:设置左指针
left=0,右指针right=str.length()-1。 - 循环比较:移动指针并比较对应字符,若所有字符均相同,则为回文数。
Java代码实现:

public boolean isPalindrome(int x) {
String str = String.valueOf(x);
int left = 0, right = str.length() - 1;
while (left < right) {
if (str.charAt(left) != str.charAt(right)) {
return false;
}
left++;
right--;
}
return true;
}
该方法的时间复杂度为O(n),空间复杂度为O(n),优点是可扩展性强,适用于字符串形式的回文判断。
判断回文数的三种方法各有优劣:数字反转法效率最高且无需额外空间;字符串反转法代码简洁但占用内存;双指针法直观且易于扩展,在实际开发中,可根据具体需求选择合适的方法,对于数字形式的回文数判断,推荐使用数字反转法,其性能最优且逻辑清晰。


















