打怪升级之旅第12天【leetcode】9. 回文数

55 阅读1分钟

每天进步一点点

题目描述

给你一个整数 x ,如果 x 是一个回文整数,返回 true ;否则,返回 false 。

回文数 是指正序(从左向右)和倒序(从右向左)读都是一样的整数。

例如,121 是回文,而 123 不是。 示例 1:

输入:x = 121 输出:true 示例 2:

输入:x = -121 输出:false 解释:从左向右读, 为 -121 。 从右向左读, 为 121- 。因此它不是一个回文数。 示例 3:

输入:x = 10 输出:false 解释:从右向左读, 为 01 。因此它不是一个回文数。

提示:

-231 <= x <= 231 - 1

思路分析

回文数 看到回文就应该想到对称性 对称性就可以使用双指针

/**
 * @param {number} x
 * @return {boolean}
 * 时间复杂度: O(n)
 * 空间复杂度: O(1)
 */
var isPalindrome = function(x) {
  let isMinus = Math.sign(x)
  // 负数不可能是回文数
  // 回文数 对称性
  if(isMinus === -1) return false
  let str = x.toString()
  let len = str.length
  let l = 0
  let r =len - 1
  let ans = true
  while(r > l){
    if(str.charAt(r) !== str.charAt(l)){
      ans = false
    }
    r--
    l++
  }
  return ans
};

image.png

不使用字符串解法

对称性

 let isMinus = Math.sign(x)
  // 负数不可能是回文数
  // 回文数 对称性
  if(isMinus === -1 || (x % 10 === 0 &&  x != 0)) return false
  let t  = 0
  while(x > t){
    t = t * 10 + x % 10
    x = Math.trunc(x / 10)
  }
  return x === t || x === Math.trunc(t /10)

image.png baybay!!