写点什么

LeetCode 题解:9. 回文数,翻转一半数字,JavaScript,详细注释

作者:Lee Chen
  • 2024-05-23
    福建
  • 本文字数:585 字

    阅读完需:约 2 分钟

原题链接

9. 回文数

解题思路

  1. 翻转数字

  2. 利用循环,每次将 x 右移一位

  3. 将移出的数字存储到reversed的个位中

  4. 每次存储前,需要将reversed左移一位

  5. 判断结果

  6. 当原 x 的长度为偶数,翻转后的结果相等

  7. 当原 x 的长度为奇数,reversed 一定比翻转后的 x 多一位,需要将其向右移动一位后再对比

  8. 处理特殊情况

  9. x 为负数,不是回文数

  10. 除了 0 以外的,最后一位为 0 的数字,必然不是回文数

示例代码

/** * @param {number} x * @return {boolean} */var isPalindrome = function(x) {  // x为负数,不是回文数  if (x < 0) {    return false  }
// 除了0以外的,最后一位为0的数字,必然不是回文数 // 如果数字最后一位是0,必然是10的倍数,取余后为0 if (x % 10 === 0 && x !== 0) { return false }
// 存储反转后的数字 let reversed = 0
// 翻转x,直到x>reversed,表示翻转结束 while (x > reversed) { // 每次翻转时,将reversed*10,表示向左移动一位 // 再将x的个位数,填充到reversed的个位 reversed = reversed * 10 + (x % 10) // x/10,表示x向右移动一位,并保留整数 x = Math.floor(x / 10) }
// 翻转后有两种可能性 // 1. 当原x的长度为偶数,翻转后的结果相等 // 2. 当原x的长度为奇数,reversed一定比翻转后的x多一位,需要将其向右移动一位后再对比 return x === reversed || Math.floor(reversed / 10) === x};
复制代码


发布于: 刚刚阅读数: 4
用户头像

Lee Chen

关注

还未添加个人签名 2018-08-29 加入

还未添加个人简介

评论

发布
暂无评论
LeetCode题解:9. 回文数,翻转一半数字,JavaScript,详细注释_Lee Chen_InfoQ写作社区