- 题目描述
Determine whether an integer is a palindrome. An integer is a palindrome when it reads the same backward as forward.
Example 1:
Input: 121 Output: true
Example 2:
Input: -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: 10 Output: false Explanation: Reads 01 from right to left. Therefore it is not a palindrome.
Follow up:
Coud you solve it without converting the integer to a string?
- 解题思路
判断一个字符串是回文的算法很容易完成。但对于整数而言,是否也需要先将整数各位存储到数组,然后进行运算呢?
一开始的想法确实是这样,后来一想:
- 对于正整数,在转换数组的同时可以计算翻转值。
- 负数,根据示例,是不可能为回文数的。
- 0,肯定为回文。
感觉这个实现,复杂度依然和位数线性相关,leetcode外文无法访问了,也不能看到更好的解决方案了~
- 实例代码
class Solution { public: bool isPalindrome(int x) { if(x < 0) return false; if(x == 0) return true; int origin = x; int reverse = 0; while(x > 0) { reverse = (reverse*10) + (x%10); x = x / 10; } return (reverse == origin); } };