侧边栏壁纸
博主头像
Fonda's Lab 博主等级

关山难越,谁悲失路之人?萍水相逢,尽是他乡之客。

  • 累计撰写 49 篇文章
  • 累计创建 27 个标签
  • 累计收到 1 条评论

目 录CONTENT

文章目录

回文数(LeetCode 9)

LouisFonda
2024-06-01 / 0 评论 / 0 点赞 / 7 阅读 / 0 字 / 正在检测是否收录...

回文数(LeetCode 9)

题目描述

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

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

例如,121 是回文,而 123 不是。

解题思路

我们需要判断给定的整数是否是回文数。一种直观的方法是将整数转换成字符串,然后判断字符串是否为回文字符串,但题目要求我们不将整数转换为字符串来解决这个问题。

我们可以使用两种方法来解决这个问题:

方法一:将整数反转

我们可以反转给定的整数,然后比较反转后的整数是否与原始整数相等。

/**
 * @param {number} x
 * @return {boolean}
 */
const isPalindrome = function(x) {
    // 如果 x 是负数,或者是 10 的倍数但不是 0,则不是回文数
    if (x < 0 || (x % 10 === 0 && x !== 0)) return false;
    
    let original = x; // 保存原始数值
    let reversed = 0; // 保存反转后的数值
    // 反转整数的过程
    while (x !== 0) {
        reversed = reversed * 10 + x % 10;
        x = Math.floor(x / 10);
    }
    
    // 判断反转后的数值与原始数值是否相等
    return reversed === original;
};

方法二:反转一半数字

我们只需要反转整数的一半,并且比较反转后的数字和原始数字的一半部分是否相等。

/**
 * @param {number} x
 * @return {boolean}
 */
const isPalindrome = function(x) {
    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 revertedNumber === x || Math.floor(revertedNumber / 10) === x;
};

总结

通过本文,我们学习了两种方法来判断一个整数是否为回文数。虽然这两种方法都能达到相同的目的,但是在特定情况下,方法二可能更为高效。通过这些方法,我们可以解决类似的回文数问题,并且不需要将整数转换为字符串来解决。

0

评论区