回文数
给你一个整数 x ,如果 x 是一个回文整数,返回 true ;否则,返回 false 。
回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数。
- 例如,121 是回文,而 123 不是。
示例 1:
输入:x = 121
输出:true
示例 2:
输入:x = -121
输出:false
解释:从左向右读, 为 -121 。 从右向左读, 为 121- 。因此它不是一个回文数。
示例 3:
输入:x = 10
输出:false
解释:从右向左读, 为 01 。因此它不是一个回文数。
解题思路
简单的来说回文就是第一位与最后一位相等,第二位与倒数第二位相同;这里分两种情况,一种是长度是奇数,从最中间往两边对称相等(除了中间那一位),另一种情况是长度位偶数,两边对称相等。所以我们可以将整数转化为字符串,使用两个指针,一个从最开始,一个从最后面开始对比,等到两个指针相遇时,如果都相等了,那这就是一个回文数
步骤可以转化为:
- 第一步:将整数转化为字符串newX
- 第二步:遍历字符串,如果
newX[i]不等于newX[newX.length-i-1]
则就不是回文数,返回false,如果是,则在判断一下i 是否 >= newX.length-i-1
如果是则说明已经遍历完了,则返回true
var isPalindrome = function(x) { let newX = String(x) for(let i=0;i<newX.length;i++){ if(newX[i] === newX[newX.length-i-1]){ if(i >=newX.length-i-1){ return true } }else{ return false } } };
明明是个大佬爷们,非让我扮女装大佬;明明是 回文数
,把他转化为 “字符串” 是不是不太正经???
数字上的问题,就用数字解决
可以分析出来,当目标数小于0或者只有个位的时候,除了0之外肯定就不是回文数
假设这个数就是回文数,那么它的个位肯定与最高位相同,十位与第二高位相同;用 x % 10
可以获取到最高位的数字,进行乘10可以转化为十位或者百位,将它存储为另一个数;而用Math.floor(x/10)
就可以截取到回文数的前一部分,进而将这两个数进行比较
var 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 x === revertedNumber || x === Math.floor(revertedNumber / 10); };