每天进步一点点
题目描述
给你一个整数 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
思路分析
回文数 看到回文就应该想到对称性 对称性就可以使用双指针
/**
* @param {number} x
* @return {boolean}
* 时间复杂度: O(n)
* 空间复杂度: O(1)
*/
var isPalindrome = function(x) {
let isMinus = Math.sign(x)
// 负数不可能是回文数
// 回文数 对称性
if(isMinus === -1) return false
let str = x.toString()
let len = str.length
let l = 0
let r =len - 1
let ans = true
while(r > l){
if(str.charAt(r) !== str.charAt(l)){
ans = false
}
r--
l++
}
return ans
};
不使用字符串解法
对称性
let isMinus = Math.sign(x)
// 负数不可能是回文数
// 回文数 对称性
if(isMinus === -1 || (x % 10 === 0 && x != 0)) return false
let t = 0
while(x > t){
t = t * 10 + x % 10
x = Math.trunc(x / 10)
}
return x === t || x === Math.trunc(t /10)
baybay!!