题目要求
判断一个整数是否是回文数。回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数。
示例
输入:121 输出:true
输入:-121 输出:false
输入:10 输出:false
Java解题
- 方法一
public boolean isPalindrome(int x) {
StringBuilder builder = new StringBuilder().append(x);
builder.reverse();
return builder.toString().equals(String.valueOf(x));
}
执行用时:16 ms, 在所有 Java 提交中击败了59.51%的用户
内存消耗:37.2 MB, 在所有 Java 提交中击败了88.53%的用户
解题思路:将整数转化为StringBuilder对象,然后利用StringBuilder类的方法reverse进行字符串反转,用反转后的字符串跟反转前的进行比较,相同则说明是回文数,否则不是。
- 方法二
public static boolean isPalindrome(int x) {
String string = String.valueOf(x);
for (int i = 0; i < string.length()/2; i++){
if (string.charAt(i) != string.charAt(string.length() - i - 1)) return false;
}
return true;
}
执行用时:13 ms, 在所有 Java 提交中击败了77.74%的用户
内存消耗:36.3 MB, 在所有 Java 提交中击败了96.61%的用户
解题思路:将整数转化为字符串,利用字符串进行判断,直接用String的charAt方法去串中某索引处的值,将其与它对称位置的数进行比较,一旦有不同说明不是回文数,随即返回false即可,否则是回文数返回true。
类似地,可以用数组的方式进行判断,用String[] array = String.valueOf(x).split("");将整数转化为String数组,比较对称位置上String是否相同。
- 方法三
public boolean isPalindrome(int x) {
if (x < 0) return false;
if (x == reverse(x)) return true;
return false;
}
public int reverse(int x) {
long result = 0;
while (x != 0) {
result = result * 10 + x % 10;
x /= 10;
}
return (result < Integer.MIN_VALUE || result > Integer.MAX_VALUE) ? 0 : (int) result;
}
执行用时:10 ms, 在所有 Java 提交中击败了92.82%的用户
内存消耗:36.6 MB, 在所有 Java 提交中击败了94.10%的用户
解题思路:利用整数反转来将参数进行反转,然后判断反转后的整数与原数是否相同,相同则是回文数,否则不是。而在整数为负时,一定不是回文数。