# 题目描述

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

LeetCode地址:https://leetcode-cn.com/problems/palindrome-number/

示例一🌰:

输入: 121
输出: true

示例二🌰:

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

示例三🌰:

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

# 解题思路1

这题的解题思路类似于leetcode上的第五题《最长回文子串》, 但比那题要简单很多.

在这里还是可以使用中心扩展法

  1. 考虑输入的值为空的情况;
  2. 将数字转换为字符串, 考虑长度为1或者2的情况;
  3. 判断字符串的长度len是奇数还是偶数;
  4. 获取字符串中间的那个索引midIndex;
  5. len为奇数, 则从midIndex向两边进行扩展判断;
  6. len为偶数, 则从midIndex-1项和midIndex项向两边扩展判断;

# coding1

/**
 * @param {number} x
 * @return {boolean}
 */
var isPalindrome = function(x) {
    if (x === null || x === undefined || x === '') return false;
    x += ""
    const len = x.length
    if (len === 1) return true;
    if (len === 2) return x[0] === x[1];
    let isEven = len % 2 === 0;
    let midIndex = Math.floor(len / 2); // 中间的索引
    let isPalind = function (str, left, right) {
        let l = left,
            r = right;
        while (l >= 0 && r <= str.length - 1) {
            if (str[l] === str[r]) {
                l--;
                r++;
            } else {
                return false;
            }
        }
        return true;
    }
    return isEven ? isPalind(x, midIndex - 1, midIndex) : isPalind(x, midIndex - 1, midIndex + 1)
};

测试代码

isPalindrome(5665)
// true

# 解题思路2

  • 将数字转换为字符串,然后判断这个字符串是不是回文字符串
  • 判断是不是回文字符串可以有两种:reverse()while循环。

# coding2

/**
 * @param {number} x
 * @return {boolean}
 */
var isPalindrome = function(x) {
    if (typeof x !== 'number') return false;
    return String(x).split('').reverse().join('') === String(x);
};

测试代码

isPalindrome(5665) // true
isPalindrome(-121) // false

# 解题思路3

和解题思路2一样,不过换一种判断回文字符串的方式。

  • 定义一个指针i和另一个指针j,分别从头和从尾移动
  • 移动时比较这两个位置上的字符串是否相等
  • 若不相等则直接返回false,否则两个指针继续移动。

# coding3

/**
 * @param {number} x
 * @return {boolean}
 */
var isPalindrome = function(x) {
    if (typeof x !== 'number') return false;
    let str = String(x);
    let i = 0, j = str.length - 1;
    while (i < j) {
        if(str.charAt(i) !== str.charAt(j)) return false;
        i++;
        j--;
    }
    return true;
};
阅读全文