# 【题库练习】09 回文数

题目地址@LeetCode-palindrome-number (opens new window)

题意:

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

示例1:

输入: 121
输出: true
1
2

示例2:

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

示例3:

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

来两个算是投机取巧的法子。。

# 一、转换为字符串比较

/**
 * @param {number} x
 * @return {boolean}
 */
var isPalindrome = function(x) {
  	// 121 -> "121" -> [1, 2, 1] -> [1, 2, 1] -> "121"
    let _x = (x + "").split("").reverse().join("");
    return _x === x + "";
};
1
2
3
4
5
6
7
8
9

提交结果:

Time Cache
256ms 45.8MB

# 二、求余数(来自题解)

该解来自于LeetCode@Able (opens new window)

这个比较巧妙的是利用余数从后往前重新累加成了一个新数字,只有回文数的取余累加后的新数字等于原数字。。

var isPalindrome = function(x) {
    let s = 0, y = 0;
    s = x;

    while(s >= 1) {
        y = y * 10 + s % 10;
        s = Math.floor(s / 10);
    }

    return y === x;
}
1
2
3
4
5
6
7
8
9
10
11
Last Updated: 2 years ago