使用 JavaScript 解答 Leetcode 第 9 题,回文数,简单难度。

题目

原题链接

本题目是 Leetcode 题库第 9 题,由此访问。

题目描述

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

进阶:你能不将整数转为字符串来解决这个问题吗?

示例 1:

输入: 121
输出: true

示例 2:

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

示例 3:

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

解题

AC 样例

/**
 * @param {number} x
 * @return {boolean}
 */
var isPalindrome = function(x) {
  if(x < 0) return false;
  let y = 0, temp = x;

  while(temp != 0) {
    y = 10* y + temp % 10;
    temp = Math.floor(temp / 10);
  }  
  
  return y == x;
};

解题思路

这是一道比较基础的回文数验证题。第一反应是将数字转为字符串后反向遍历,将反转后的字符串同原字符串比对,如果完全一致,则认为测试用例所提供的数字是一个回文数。

对于题目的进阶要求,即不将数字转为字符串处理,也有一个解法。首先根据题目所示样例,可以基本排除所有输入的负数。使用求余法依次获取数字的最低位上的数字,直至所有位数都被获取,按十进制关系拼接获得的数字,得到前后反转的新数据,比较两个数据是否完全一致,如是则认为测试用例为回文数。

注意:对于反转后有效数字前的 0,将不保留。