给你一个整数 x ,如果 x 是一个回文整数,返回 true ;否则,返回 false 。
回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数。
例如,121 是回文,而 123 不是。
来源:力扣(LeetCode)
链接:https://leetcode.cn/problems/palindrome-number
分析
- 负数不是回文数
- 个位数是0的数不是回文数,0除外
- 数据范围:-2^31 ≤ x ≤ 2^31-1
解法1
数字转换字符串,将转换的字符串进行反转然后和原字符串比较。
class Solution {
public boolean isPalindrome(int x) {
String[] split = String.valueOf(x).split("");
int size = split.length;
String[] str = new String[size];
for (int i = size - 1; i >= 0; i--) {
str[Math.abs(size - i - 1)] = split[i];
}
return Arrays.toString(split).equals(Arrays.toString(str));
}
}
解法2
反转数字然后比较,由于给出的数据范围是int.MAX,如果强行反转会导致溢出。但是可以换个思路,同样是反转数字,由于回文数的特殊的性质,我们将这个数字x进行‘分半’,如果这一半是回文数,那原来的数即使回文数。当数字x的长度为奇数的时候,中间的数反转后总是等于它本身,因此可以省略第一个数,当数字x的长度为偶数时,直接与另一半进行比较,若相等则为回文数。
class Solution {
public boolean isPalindrome(int x) {
if (x < 0 || (x % 10 == 0 && x != 0)) {
return false;
}
int reverse = 0;
while (x > reverse) {
reverse = x % 10 + reverse * 10;
x = x / 10;
}
return x == reverse || x == reverse / 10;
}
}
评论区