/*给你一个整数 x ,如果 x 是一个回文整数,返回 true ;否则,返回 false 。
回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数。*/
//我采用了字符串双指针法,想起来之前写的合并两个有序数组,也是用的双指针写法
var isPalindrome = function(str) {
let left = 0;
let right = str.length - 1;
while (left < right) {
if (str[left] !== str[right]) {
return false;
}
left++;
right--;
}
return true;
};
//AI给的另一种思路:可以用数字反转法,考虑边界值的情况
var isPalindrome = function(x) {
// 处理边界情况
if (x < 0 || (x % 10 === 0 && x !== 0)) return false;
if (x < 10) return true; // 单个数字一定是回文数
let reversed = 0;
let original = x;
// 反转一半数字进行比较
while (x > reversed) {
reversed = reversed * 10 + x % 10;
x = Math.floor(x / 10);
}
// 处理奇偶长度情况
return x === reversed || x === Math.floor(reversed / 10);
};
//结合AI的建议,整理代码
var isPalindrome = function(x) {
// 处理边界情况
if (x < 0 || (x % 10 === 0 && x !== 0)) {
return false;
}
// 转为字符串处理
const str = x.toString();
let left = 0;
let right = str.length - 1;
while (left < right) {
if (str[left] !== str[right]) {
return false;
}
left++;
right--;
}
return true;
};
console.log(isPalindrome(12321))//true
console.log(isPalindrome(1231))//false
console.log(isPalindrome(1221221))//true
console