题目描述
https://leetcode.cn/problems/palindrome-number/description/
答案
function isPalindrome(x: number): boolean {
// 特殊情况:
// 1. x < 0: 负数不可能是回文数
// 2. (x % 10 === 0 && x !== 0): 末尾为0的数不可能是回文数(除了0本身)
if (x < 0 || (x % 10 === 0 && x !== 0)) {
return false
}
let revertedNumber = 0
// 反转后半部分数字
while (x > revertedNumber) {
// revertedNumber * 10: 将上一次循环中取到的最后一位 * 10
// (x % 10): 取当前循环的最后一位 x
// 到这里属于是得到回文数后半部分数字的反转版
revertedNumber = revertedNumber * 10 + (x % 10)
// 舍弃掉被取走的最后一位
x = Math.floor(x / 10)
// 例如 1221 从末尾开始, 分别取出 1、2 后组成 12, x 变成了 12
}
// x === revertedNumber: 例如 1221 最终判断 12 === 12
// x === Math.floor(revertedNumber / 10): 当数字长度为奇数时,通过 revertedNumber/10 去除中位数, 例如 121, 最终判断 1 === 1
return x === revertedNumber || x === Math.floor(revertedNumber / 10)
}- 时间复杂度: O(log n), 每次除以 10
- 空间复杂度: O(1)