2021 年 8 月 29 日 链接:https://leetcode-cn.com/problems/palindrome-number/ 耗时:13m
题目
描述
给你一个整数 x ,如果 x 是一个回文整数,返回 true ;否则,返回 false 。
回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数。例如,121 是回文,而 123 不是。
示例
示例 1:
输入:x = 121
输出:true
示例 2:
输入:x = -121
输出:false
解释:从左向右读, 为 -121 。 从右向左读, 为 121- 。因此它不是一个回文数。
示例 3:
输入:x = 10
输出:false
解释:从右向左读, 为 01 。因此它不是一个回文数。
限制
-
解答
思路
去除边界,小于 0 不考虑
- 根据回文数的定义,只需保证中心左右两边的每位数字在与中心位置的距离相同时,它们的值也是相同的
- 将文字转字符串,中心位置左边距离中心最近的字符的索引记为 middle = Math.floor(length / 2) - 1,则中心位置右边距离中心最近的字符的索引为 (length - 1 - middle)
遍历从 middle 到 0 的每个字符,只需保证它们与 length - 1 - middle 到 length 所对应的每个字符相同即可确定是回文数
代码
/**
* @param {number} x
* @return {boolean}
*/
var isPalindrome = function(x) {
if(x < 0) {
return false
}
const xString = x + ''
const xStringLength = xString.length
// 取左边距离中心最近的字符的索引
const middle = Math.floor(xStringLength / 2) - 1
// 从 middle 遍历到 0
for(let i = middle; i >= 0; i --){
if(xString[i] !== xString[xStringLength - 1 - i]){
return false
}
}
return true
};
优化
直接操作数字,使用反转实现
- 需要考虑边界情况,尾数是 0 且不等于 0 的情况不能参与反转
- 参考链接:https://leetcode-cn.com/problems/palindrome-number/solution/hui-wen-shu-by-leetcode-solution/
代码
/** * @param {number} x * @return {boolean} */ var isPalindrome = function(x) { if(x === 0){ return true } if(x < 0){ return false } if(x % 10 === 0){ return false } let invertNumber = 0 while(x > invertNumber){ invertNumber = (x % 10) + invertNumber * 10 x = Math.floor(x / 10) } return x === invertNumber || x === Math.floor(invertNumber / 10) };