🔥码云GVP开源项目 12k star Uniapp+ElementUI 功能强大 支持多语言、二开方便! 广告
>[success] # 回文数 ~~~ 判断一个整数是否是回文数。回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数。 注意 负数不是回文数 ~~~ >[danger] ##### python解题 * 思路 ~~~ 1.121 发现规律,每一个字符串收尾一致就是回文数 2.利用数字长度的一半循环,则左侧项都为i,右侧项都为len-1-i ~~~ * 个人解法 ~~~ class Solution: def isPalindrome(self, x): """ :type x: int :rtype: bool """ if x<0: return False else: x = str(x) if x==0: return True for i in range(0,int(len(x)/2)): if x[i]!=x[len(x)-i-1]: return False return True ~~~ * 优秀解法 ~~~ 1.任何数的余数10,是这个数的末尾数 例如 121%10 =1 2.数字 前半段 和 数字 后半段的数一致 为 回文数 例如 11211 也就是11=11 注: 注释一:结尾是0的数绝对不是回文数,但是0是回文数 注释二:例如121 x最后会变成1 而revertedNumber 变成12, 6556 x最后变成56 revertedNumber 变成56, 6565 x最后 变成6 revertedNumber565,如果是奇数个数 或者是偶数非回文函数的数,会多执行一次,来终止循环 如果是偶数的回文函数,就会正好前后一致终止循环 注释三:面对非回文数,和奇数回文数会比,实际多一个中位数,中位数是最后一位,去掉末尾中位数,去比较实际两者是否一致 ~~~ ~~~ class Solution: def isPalindrome(self, x): """ :type x: int :rtype: bool """ # 注释一 if (x<0 or (x%10 == 0 and x!=0)): return False else: revertedNumber = 0 # 注释二 while x> revertedNumber: revertedNumber = revertedNumber*10 + x%10 x = x//10 # 注释三 return x == revertedNumber or x == revertedNumber//10 ~~~ * python 解法 ~~~ class Solution: def isPalindrome(self, x): """ :type x: int :rtype: bool """ if x < 0: return False else: return int(str(x)[::-1]) == x ~~~ * js 最快解法 ![](https://box.kancloud.cn/2f3df7cfab52c6d963cf35f6fe827371_859x504.png) >[danger] ##### js解题 * 最常见的方法,循环当前长度的一半,用首尾值依次比较 ~~~ /** * @param {number} x * @return {boolean} */ var isPalindrome = function(x) { if(x<0) return false if(x===0) return true var x = x.toString() for(var i =0;i<parseInt(x.length/2);i++){ if(x[i]!=x[x.length-i-1]) return false } return true }; ~~~ * 跟第一种思路一样实现不同 ~~~ /** * @param {number} x * @return {boolean} */ var isPalindrome = function(x) { if(x<0) return false var s = x.toString() var i =0 ,j=s.length-1 while(i<=j){ if(s[i]==s[j]){ i++ j-- }else{ return false } } return true }; ~~~ * 利用反转整数的思想去比较 ~~~ var isPalindrome = function(x) { if(x<0||x%10===0 &&x!=0){ return false } return x.toString().split('').reverse().join("") == x }; ~~~ * 最快解法[关于trunc方法说明]([https://blog.csdn.net/qq\_37016928/article/details/80667247](https://blog.csdn.net/qq_37016928/article/details/80667247)) ~~~ /** * @param {number} x * @return {boolean} */ var isPalindrome = function(x) { if (x < 0) { return false; } let len = 1; while (x / len > 10) { len *= 10; } while (x > 0) { let left = Math.trunc(x / len); let right = x % 10; if (left !== right) { return false; } else { x = Math.trunc((x % len) / 10); len /= 100; } } return true; }; ~~~