9. 回文数
9. 回文数
题目
Given an integer x
, return true
if x
is a palindrome ,and false
otherwise .
Example 1:
Input: x = 121
Output: true
Explanation: 121 reads as 121 from left to right and from right to left.
Example 2:
Input: x = -121
Output: false
Explanation: From left to right, it reads -121. From right to left, it becomes 121-. Therefore it is not a palindrome.
Example 3:
Input: x = 10
Output: false
Explanation: Reads 01 from right to left. Therefore it is not a palindrome.
Constraints:
-2^31 <= x <= 2^31 - 1
Follow up: Could you solve it without converting the integer to a string?
题目大意
判断一个整数是否是回文数。回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数。
解题思路
判断一个整数是不是回文数,先将整数转换为字符串,然后用对撞指针分别一前一后开始扫描,如果前后的字段相同,则移动指针,否则直接返回 false
。
- 转化为字符串:
- 首先,将整数转换为字符串,方便通过字符串进行比较,使用
x = '' + x
将数字x
转换成字符串。
- 首先,将整数转换为字符串,方便通过字符串进行比较,使用
- 双指针法:
- 通过两个指针
left
和right
分别指向字符串的两端,逐步向中间移动。 - 在每一步比较
x[left]
和x[right]
是否相等,如果相等,继续向中间推进;如果不相等,说明不是回文数,返回false
。
- 通过两个指针
- 终止条件:
- 当
left >= right
时,说明已经完成了所有的比较,若没有发现不相等的字符,返回true
,表示这是一个回文数。
- 当
复杂度分析
- 时间复杂度:
O(log_10(x))
,其中x
是输入的数字,遍历的次数与数字的位数成正比,所以时间复杂度是对数级别。 - 空间复杂度:
O(1)
,只使用了常数的额外空间来存储一些变量。
代码
/**
* @param {number} x
* @return {boolean}
*/
var isPalindrome = function (x) {
x = '' + x;
let left = 0;
let right = x.length - 1;
while (left < right) {
if (x[left] === x[right]) {
left++;
right--;
} else {
return false;
}
}
return true;
};
相关题目
题号 | 标题 | 题解 | 标签 | 难度 | 力扣 |
---|---|---|---|---|---|
234 | 回文链表 | [✓] | 栈 递归 链表 1+ | 🟢 | 🀄️ 🔗 |
2217 | 找到指定长度的回文数 | 数组 数学 | 🟠 | 🀄️ 🔗 | |
2396 | 严格回文的数字 | 脑筋急转弯 数学 双指针 | 🟠 | 🀄️ 🔗 | |
2843 | 统计对称整数的数目 | 数学 枚举 | 🟢 | 🀄️ 🔗 | |
3260 | 找出最大的 N 位 K 回文数 | 贪心 数学 字符串 2+ | 🔴 | 🀄️ 🔗 | |
3272 | 统计好整数的数目 | 哈希表 数学 组合数学 1+ | 🔴 | 🀄️ 🔗 |