LeetCode題解:9. 回文數(shù),翻轉(zhuǎn)一半數(shù)字,JavaScript,詳細(xì)注釋

原題鏈接

9. 回文數(shù)

解題思路

  1. 翻轉(zhuǎn)數(shù)字
    • 利用循環(huán),每次將x右移一位
    • 將移出的數(shù)字存儲到reversed的個位中
    • 每次存儲前,需要將reversed左移一位
  2. 判斷結(jié)果
    • 當(dāng)原x的長度為偶數(shù),翻轉(zhuǎn)后的結(jié)果相等
    • 當(dāng)原x的長度為奇數(shù),reversed一定比翻轉(zhuǎn)后的x多一位,需要將其向右移動一位后再對比
  3. 處理特殊情況
    • x為負(fù)數(shù),不是回文數(shù)
    • 除了0以外的,最后一位為0的數(shù)字,必然不是回文數(shù)

示例代碼

/**
 * @param {number} x
 * @return {boolean}
 */
var isPalindrome = function(x) {
  // x為負(fù)數(shù),不是回文數(shù)
  if (x < 0) {
    return false
  }

  // 除了0以外的,最后一位為0的數(shù)字,必然不是回文數(shù)
  // 如果數(shù)字最后一位是0,必然是10的倍數(shù),取余后為0
  if (x % 10 === 0 && x !== 0) {
    return false
  }

  // 存儲反轉(zhuǎn)后的數(shù)字
  let reversed = 0

  // 翻轉(zhuǎn)x,直到x>reversed,表示翻轉(zhuǎn)結(jié)束
  while (x > reversed) {
    // 每次翻轉(zhuǎn)時,將reversed*10,表示向左移動一位
    // 再將x的個位數(shù),填充到reversed的個位
    reversed = reversed * 10 + (x % 10)
    // x/10,表示x向右移動一位,并保留整數(shù)
    x = Math.floor(x / 10)
  }

  // 翻轉(zhuǎn)后有兩種可能性
  // 1. 當(dāng)原x的長度為偶數(shù),翻轉(zhuǎn)后的結(jié)果相等
  // 2. 當(dāng)原x的長度為奇數(shù),reversed一定比翻轉(zhuǎn)后的x多一位,需要將其向右移動一位后再對比
  return x === reversed || Math.floor(reversed / 10) === x
};
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容