给定一个整数 x ,如果 x 是一个回文整数,返回 true ;否则,返回 false 。回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数。
- 例如,
121是回文,而123不是。
示例 1:
输入: x = 121
输出: true
示例 2:
输入: x = -121
输出: false
解释: 从左向右读, 为 -121 。 从右向左读, 为 121- 。因此它不是一个回文数。
示例 3:
输入: x = 10
输出: false
解释: 从右向左读, 为 01 。因此它不是一个回文数。
提示:
-2^31 <= x <= 2^31 - 1
看到这个题目又想到前面做的题目寻找最长的回文字符串,于是快速写了起来:
/**
* @param {number} x
* @return {boolean}
*/
const isPalindrome = function(x) {
if (x < 0) return false;
let num = 0;
let y = x;
while(y) {
num = num * 10 + y % 10
y = Math.floor(y / 10);
}
return num === x;
};
时间复杂度是O(Log(X)),觉得还不错,但是看了运行时间只能排在中间靠后的位置
于是看了评论才知道用双指针更快,于是又写了一个双指针:
/**
* @param {number} x
* @return {boolean}
*/
const isPalindrome = function(num) {
if (num < 0) return false;
let l = 0;
let r = Math.floor(Math.log10(num));
let x = 0;
let y = 0;
let z = num;
while(r > l) {
x = x * 10 + z % 10;;
z = Math.floor(z / 10);
y = Math.floor(num / Math.pow(10, r))
if (y !== x) {
return false;
}
l++;
r--;
}
return true;
};
进步在于思想上的交流碰撞,最终融会贯通,欢迎各位指正。