回文数

字符串

提前加一些判断。

function isPalindrome(x: number): boolean {
  if (x < 0) {
    return false
  }
  if (x > Math.pow(2, 31) - 1 || x < Math.pow(-2, 31)) {
    return false
  }
  
  const str = x.toString()
  const mid = Math.floor(str.length / 2)
  const isEven = mid === str.length / 2
  
  return isEven
    ? str.slice(0, mid) === str.slice(mid).split('').reverse().join('')
    : str.slice(0, mid) === str.slice(mid + 1).split('').reverse().join('')
}

数字

取出反转数字比大小。

function isPalindrome(x: number): boolean {
  if (x === 0) {
    return true
  }
  // 末尾为 0 的必定 false
  if (x < 0 || x % 10 === 0) {
    return false
  }
  if (x > Math.pow(2, 31) - 1 || x < Math.pow(-2, 31)) {
    return false
  }
  
  let num = 0
  while (x > num) {
    num = num * 10 + x % 10
    x = Math.floor(x / 10)
  }
  
  return x === num || x === Math.floor(num / 10)
}