# 判断回文数

  • 给定一个数字或字符串判断该目标是否是回文数

Example 1:

输入:target = 12321
输出:true
解释:12321 反过来也是12321

Example 2:

输入:target = '12321'
输出:true
解释:可以输入字符串类型,那么'12321' 反过来也是 '12321'

Example 3:

输入:target = 123456
输出:false
解释:123456 反过来是 654321

# Solving Ideas

# method 1

  • 转换为字符串,进行正序与倒叙比较
function isPalindromic(target) {
  target = String(target)
  let length = target.length - 1
  for (let i = 0; i < target.length; i++)
    if((target[i] != target[length--])) return false
  return true
}

# method 2

  • 尽量不转换为字符串来解题
  • 但本质上 replace 也会转换为字符串
function isPalindromic(target) {
  const hash = {}
  target.__proto__.replace = ''.replace
  target.replace(/\d/ig, (item, i,c) => {hash[i] = +item, hash['length'] = i + 1})
  const values = Object.values(hash)
  return values.every((_, i) => hash[i] === values[--hash['length']])
}

# method 3

  • 一行代码搞定
  • 转换字符串再转换为数组进行翻转再进行连接比较
const isPalindromic = target => String(target).split('').reverse().reduce((current, item) => current + item) == target

# method 4

  • 再简单点直接 join 之后就可以进行比较
const isPalindromic = target => Number(String(target).split('').reverse().join('')) == target

# method 5

  • 不转换为字符串,纯数字解法
  • 通过取模的方式来解决
function isPalindromic(target) {
  let stack = []
  while (target > 0) {
    stack.push(target % 10)
    target = ~~(target / 10)
  }
  let length = stack.length
  for (let i = 0; i < stack.length; i++)
    if(stack[i] != stack[--length]) return false
  return true
}

# 测试的代码

  • 用于测试的代码
console.log(isPalindromic(12321)) // true
console.log(isPalindromic('123321')) // true
console.log(isPalindromic(123)) // false