Java 判断回文数
### Java 判断回文数
#### 一、问题描述
回文数是指正着读和反着读都相同的数字。例如,121 和 12321 是回文数,而 123 和 1234 不是。该问题要求编写一个 Java 程序,判断给定的整数是否为回文数。
#### 二、解决方案
1. **字符串法**:将整数转换为字符串,反转字符串并与原字符串比较。
2. **数学法**:通过对数字进行数学操作来反转数字,然后与原数字比较。
#### 三、示例代码
以下是两种方法的实现代码。
##### 方法 1:字符串法
```java
public class PalindromeNumber {
public static boolean isPalindrome(int x) {
// 负数和以0结尾的数字不是回文数
if (x < 0 || (x % 10 == 0 && x != 0)) {
return false;
}
// 转换为字符串并反转
String str = Integer.toString(x);
String reversedStr = new StringBuilder(str).reverse().toString();
return str.equals(reversedStr);
}
public static void main(String[] args) {
int num = 121;
System.out.println(num + " 是回文数吗? " + isPalindrome(num));
}
}
```
##### 方法 2:数学法
```java
public class PalindromeNumber {
public static boolean isPalindrome(int x) {
// 负数和以0结尾的数字不是回文数
if (x < 0 || (x % 10 == 0 && x != 0)) {
return false;
}
int reversed = 0;
int original = x;
// 反转数字的一半
while (x > 0) {
reversed = reversed * 10 + x % 10;
x /= 10;
}
// 只需比较原始数与反转数
return original == reversed;
}
public static void main(String[] args) {
int num = 121;
System.out.println(num + " 是回文数吗? " + isPalindrome(num));
}
}
```
#### 四、复杂度分析
- **时间复杂度**:
- 字符串法:O(n),其中 n 是数字的位数。
- 数学法:O(n),同样是数字的位数。
- **空间复杂度**:
- 字符串法:O(n),需要额外的空间存储反转字符串。
- 数学法:O(1),只使用常量级的额外空间。
#### 五、总结
以上代码提供了判断回文数的两种方法。字符串法简单直观,适合快速实现;数学法则避免了字符串转换,适合在内存受限的环境下使用。可以根据具体需求选择适合的方法。