一、题目描述:
给你一个整数 x ,如果 x 是一个回文整数,返回 true ;否则,返回 false 。
回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数。例如,121 是回文,而 123 不是。
示例 1:
输入:x = 121
输出:true
示例 2:
输入:x = -121
输出:false
解释:从左向右读, 为 -121 。 从右向左读, 为 121- 。因此它不是一个回文数。
二、思路分析
根据前一个整数反转的思路,想了一个改良版 直接过滤掉负数返回false 然后把x存起来,然后进行反转 然后判断反转后的和最初的x是否一致
这次还挺快
我又去题解找了其他方法,看了大佬的解法,我只想说大佬牛逼,我想不出来
他的思路是这样的 小于零直接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 春招闯关活动」, 点击查看活动详情