Offer 驾到,掘友接招!我正在参与2022春招打卡活动,点击查看活动详情。
9. 回文数
给你一个整数 x ,如果 x 是一个回文整数,返回 true ;否则,返回 false 。
回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数。
例如,121 是回文,而 123 不是。
示例 1:
输入:x = 121 输出:true
示例 2:
输入:x = -121 输出:false 解释:从左向右读, 为 -121 。 从右向左读, 为 121- 。因此它不是一个回文数。
示例 3:
输入:x = 10 输出:false 解释:从右向左读, 为 01 。因此它不是一个回文数。
提示:
-231 <= x <= 231 - 1 进阶:你能不将整数转为字符串来解决这个问题吗?
题目分析
回文数老生常谈的题了,我们可以通过对当前数字进行不断的求与再将余数进行比较即可判断出是否时回文数。当前还是有些一眼就能看出不是回文数的方法,比如说负数就一定不是回文数,比如说个位是0的俩位数三位数也不是回文数。
这里我们重点讲讲进阶解法如何将整数转为字符串来解决这个问题。其实整数转为字符串反而更简单了。我们可以通过toString方法将整数转换成字符串,再获得字符串一半的长度。
我们根据字符串一半长度进行遍历并判断当前值是否与长度减去当前加1对应的字符是否相同。如果相同的话就继续遍历,假设不相同时则直接返回false即可。如果遍历完毕就说明此字符串是回文数。
分布实现
通过toString方法将整数x转换为字符串
let xStr = x.toString()
找到字符串的一半长度
let n = Math.floor(xStr.length/2)
遍历字符串一半长度并判断xStr[i]与 xStr[len - i - 1])是否相同,不相同则返回false,遍历完毕就说明是回文数。
for(let i = 0; i < n; i++){
if(xStr[i] != xStr[len - i - 1]) return false
}
代码实现
var isPalindrome = function(x) {
let xStr = x.toString()
let n = Math.floor(xStr.length/2)
let len = xStr.length
for(let i = 0; i < n; i++){
if(xStr[i] != xStr[len - i - 1]) return false
}
return true
};