回文数|刷题打卡

144 阅读2分钟

一、题目描述:

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

回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数。例如,121 是回文,而 123 不是。

示例 1:

输入:x = 121

输出:true

示例 2:

输入:x = -121

输出:false

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

二、思路分析

根据前一个整数反转的思路,想了一个改良版 直接过滤掉负数返回false 然后把x存起来,然后进行反转 然后判断反转后的和最初的x是否一致

image.png

这次还挺快

我又去题解找了其他方法,看了大佬的解法,我只想说大佬牛逼,我想不出来

他的思路是这样的 小于零直接return 小于10 return true 减少循环次数。。

而且取数学量级来获的首位

通过x / n 获取首位。

通过x % 10 获取末位。

然后不断比较首尾 比较完

(x % n) / 10 去除首位和末位

(x % n去除首位,x / 10去除末位),x 位数减 2。

x的位数减2,存储量级的n也需要 n/100

直到不符合n > 1 && x > 0循环结束

作为一个学渣,这可太强了

三、AC 代码:

1.反转修改版

var isPalindrome = function(x) {
   if(x<0) return false
   let x1 = x
   let result = 0
   while(x!==0){
       result = result*10 + x%10
       x = (x/10)|0
   }
   return x1 == result
};

2.究极优化版

var isPalindrome = function (x) {
    if (x < 0) return false;
    if (x < 10) return true;
    let n = 10 ** Math.floor(Math.log10(x));
    while (n > 1 && x > 0) {
        if (Math.floor(x / n) !== x % 10) return false;
        x = Math.floor((x % n) / 10);
        n /= 100;
    }
    return true;
};

四、总结:

学好数理化,走遍天下都不怕,这个取头部的思路值得学习

本文正在参与「掘金 2021 春招闯关活动」, 点击查看活动详情