LeetCode-9 回文数 难度简单

43 阅读1分钟

给定一个整数 x ,如果 x 是一个回文整数,返回 true ;否则,返回 false 。回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数。

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

示例 1:

输入: x = 121
输出: true

示例 2:

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

示例 3:

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

提示:

  • -2^31 <= x <= 2^31 - 1

看到这个题目又想到前面做的题目寻找最长的回文字符串,于是快速写了起来:

/**
 * @param {number} x
 * @return {boolean}
 */
const isPalindrome = function(x) {
    if (x < 0) return false;
    let num = 0;
    let y = x;
    while(y) {
        num = num * 10 + y % 10
        y = Math.floor(y / 10);
    }
    return num === x;
};

时间复杂度是O(Log(X)),觉得还不错,但是看了运行时间只能排在中间靠后的位置

image.png

于是看了评论才知道用双指针更快,于是又写了一个双指针:

/**
 * @param {number} x
 * @return {boolean}
 */
const isPalindrome = function(num) {
    if (num < 0) return false;
    let l = 0;
    let r = Math.floor(Math.log10(num));
    let x = 0;
    let y = 0;
    let z = num;
    while(r > l) {
        x = x * 10 + z % 10;;
        z = Math.floor(z / 10);
        y = Math.floor(num / Math.pow(10, r))
        if (y !== x) {
            return false;
        }
        l++;
        r--;
    }
    return true;
};

进步在于思想上的交流碰撞,最终融会贯通,欢迎各位指正。