Skip to content
On this page

9-回文数

标签:数学

题目信息

题目地址回文数

题目内容:

javascript
给你一个整数x,如果x是一个回文整数,返回true;否则,返回false。

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

例如,121是回文,而123不是。
 
示例 1
    输入:x = 121
    输出:true

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

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

提示:
    -231 <= x <= 231 - 1

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

题解

解法一

思路:

将数字转为字符串后,可以使用验证回文字符串的思路来解决该题

代码实现:

javascript
/**
 * @param {number} x
 * @return {boolean}
 */
var isPalindrome = function(x) {
    const str = `${x}`
    if(str.length === 1) return true
    let left = 0,
        right = str.length - 1
    while(left < right) {
        if(str[left] !== str[right]) return false
        left++
        right--
    }
    return true
};

解法二

思路:

我们可以对数字进行反转计算,算出数字反转后的值,当反转到一半时,就和前面的数字相等了,

计算反转后的值可以一位一位进行计算,从原数字的最后一位开始,获取原数字最后一位可以将原数字对10进行取余,然后加上反转后的数字乘以10

而每次计算过反转数字后,将原数字除以10向下取整

最后有两种情况:

如果数字位数是偶数,那么反转数字等于处理后的原数字

如果数字位数是奇数,那么反转数字/10并向下取整就等于处理后的原数字

代码实现:

javascript
var isPalindrome = function(x) {
    // 负数和末尾为0的非0数不是回文数
    if(x < 0 || (x % 10 === 0 && x !== 0)) return false
    let revertedNumber = 0
    while(x > revertedNumber) {
        revertedNumber = revertedNumber * 10 + x % 10
        x = Math.floor(x / 10)
    }
    return x === revertedNumber || x === Math.floor(revertedNumber / 10)
};