题目
给你一个整数 x
,如果 x
是一个回文整数,返回 true
;否则,返回 false
。
回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数。
- 例如,
121
是回文,而123
不是。
示例 1:
输入: x = 121
输出: true
题解
方式一:反转数组
public boolean isPalindrome(int x) {
String str = String.valueOf(x);
StringBuilder sb = new StringBuilder(str);
// reverse方法用的反转byte数组的方式
return str.equals(sb.reverse().toString());
}
==============反转数组
char[] c = new char[]{'a', 'a', 'b', 'b'};
int n = c.length - 1;
for (int j = (n-1) >> 1; j >= 0; j--) { // 从中点往起点遍历
int k = n - j; // 对应的另一边下标
// swap
byte cj = c[j];
c[j] = c[k];
c[k] = cj;
}
方式二:双指针
public boolean isPalindrome(int x) {
String str = String.valueOf(x);
char[] c = str.toCharArray();
int l = 0;
int r = c.length - 1;
while (l <= r) {
if (c[l] != c[r]) {
return false;
}
l++;
r--;
}
return true;
}
方式三:反转数字
public boolean isPalindrome(int x) {
if (x < 0 || (x % 10 == 0 && x != 0)) {
return false;
}
int reverseNum = 0; // 反转后一半数字
while (x > reverseNum) { // 当reverseNum <= x时说明已经反转一半了
reverseNum = reverseNum * 10 + x % 10; // reverseNum加上x最后一位
x /= 10; // x去掉最后一位
}
// 奇数个和偶数个都要考虑,奇数个reverseNum位数比x多一位
return x == reverseNum || x == reverseNum / 10;
}
总结
算法:双指针
,反转数组
,数学模拟