题目:
给你一个整数 x ,如果 x 是一个回文整数,返回 ture ;否则,返回 false 。
回文数:是指正序(从左向右)和倒序(从右向左)读都是一样的整数。例如,121 是回文,而 123 不是。
示例 1:输入:x = 121输出:true示例 2:输入:x = -121输出:false解释:从左向右读, 为 -121 。 从右向左读, 为 121- 。因此它不是一个回文数。示例 3:输入:x = 10输出:false解释:从右向左读, 为 01 。因此它不是一个回文数。
方法1:
- 首先获取当前数量级
n,公式 n=10⌊log10x⌋,如:x = 24, n = 10;x = 6234, n = 1000。 - 通过
x / n获取首位。 - 通过
x % 10获取末位。 (x % n) / 10去除首位和末位,(x % n去除首位,x / 10去除末位),x 位数减 2。n /= 100x 位数减 2, 故n需要除 10^2102。
以 123421 为例,运算过程如下:
| x | n | x / n | x % 10 |
|---|---|---|---|
| 123421 | 100000 | 1 | 1 |
| 2342 | 1000 | 2 | 2 |
| 34 | 10 | 3 | 4 |
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;
};
方法2:
- 负数肯定不是回文;
设定一个循环,从整数第一位下标开始,第一位与最后一位对比,第二位与倒数第二位对比,回文两边的数字会全部相等,循环次数最大值为Math.floor(x.length/2), 而如果不一致,则判断非回文,即刻退出循环。
var isPalindrome = function(x) { if(x<0) return false; x = x.toString(); var len = x.length; for(i=0;i<len/2;i++){ if(x[i]!=x[len-1-i]) return false; } return true; };方法3:
x转化成字符串;
- 与翻转后的字符串对比,是否相同;
var isPalindrome = function(x) { if(x<0) return false; x = x.toString(); var reverseStr = x.split("").reverse().join("") if( reverseStr == x){ return true; }else return false; };
