判断回文的话,可以利用reverse函数来进行反转,但是reverse是数组的操作函数,这里就要来进行下转换了
字符串解法
var isPalindrome = function (x) {
let str = x.toString()
return str === str.split("").reverse().join('')
};
数字解法
完整的反转
var isPalindrome = function (x) {
if (x < 0 || (x % 10 === 0 && x !== 0)) return false;
let rev = 0;
let origin = x
while (x) {
rev = rev * 10 + (x % 10);
x = Math.floor(x / 10);
}
return rev === origin;
};
📝 说明:
- 保存原始数字
origin - 使用取模和除法将数字反转
- 最后与原始值比较
⚠️ 缺点:
- 存在整数溢出的风险(在某些语言中需要判断)
反转一半
var isPalindrome = function (x) {
if (x < 0 || (x % 10 === 0 && x !== 0)) return false;
let rev = 0;
// 推出循环的情况是 rev >= x
// 此时偶数位就是 ===
// 奇数位就是 rev > x
while (x > rev) {
rev = rev * 10 + (x % 10);
x = Math.floor(x / 10);
}
// x == rev (偶数位)或 x == Math.floor(rev / 10)(奇数位)
return rev === x || Math.floor(rev / 10) === x;
};
✅ 优点:
- 时间复杂度仍为 O(logN)
- 空间复杂度 O(1)
- 不需要保存原始值,也不会发生溢出