🌕 9. 回文数
2022年6月20日
- algorithm
🌕 9. 回文数
难度: 🌕
问题描述
解法 1 - 双指针
class Solution {
public boolean isPalindrome(int x) {
// 思路:
// 找到最高非 0 位所在下标,双指针移动
if(x < 0) {
return false;
}
if(x == 0) {
return true;
}
// x > 0
int left = 10;
for(; left >= 0; left --) {
if(x / (int)Math.pow(10, left) > 0) {
break;
}
}
if(left == 0) {
// 说明是 10 以内
return true;
}
// left > 0
int right = 0;
while(left > right) {
int l = (x / (int)Math.pow(10, left)) % 10;
int r = (x / (int)Math.pow(10, right)) % 10;
if(l == r) {
left --;
right ++;
} else {
return false;
}
}
return true;
}
}
输出 1
解法 2 - 反转数字
class Solution {
public boolean isPalindrome(int x) {
// 思路:
// 1234321 要想判断是否为回文串,
// 可从低位开始,进行反转,得到 右四位的反转 1234
// 和剩下的左四位进行比较
// 12321 右四位的反转 123 左四位 12
if(x < 0) {
return false;
}
if(x == 0) {
return true;
}
// 还需要判断一种特殊情况 x == 10
if(x % 10 == 0) {
return false;
}
// x > 0
int sum = 0; // 由于只翻转一半长度是数字,因此绝对不会超范
while(x > sum) {
int cur = x % 10;
sum = sum * 10 + cur;
x /= 10;
}
if(sum == x) {
// 偶数位回文串
return true;
}
if(sum / 10 == x) {
return true;
}
return false;
}
}