9. Palindrome Number
题目大意
Given an integer x
, return true
if x
is a palindrome, and false
otherwise.
中文释义
给定一个整数 x
,如果 x
是一个回文数,则返回 true
,否则返回 false
。
示例
示例 1:
输入: x
= 121
输出: true
解释: 从左到右读为 121,从右到左也读为 121。
示例 2:
输入: x
= -121
输出: false
解释: 从左到右读为 -121,从右到左读为 121-。因此它不是回文数。
示例 3:
输入: x
= 10
输出: false
解释: 从右到左读为 01。因此它不是回文数。
限制条件
-2^31 <= x <= 2^31 - 1
进阶
你能在不将整数转换为字符串的情况下解决这个问题吗?
解题思路
方法
该方法不使用字符串转换,而是通过数学方式判断一个整数是否是回文数。
-
特殊情况处理:
- 如果
x
是负数,或者x
的末位是 0(且x
不等于 0),则x
不是回文数。
- 如果
-
构造反转的一半数字:
- 初始化两个变量,
num1
保存原始数字,num2
用于构造x
的反转的一半数字。
- 初始化两个变量,
-
反转数字的一半:
- 当
num1
大于num2
时,继续反转。 - 将
num1
的最后一位数字添加到num2
的末尾,并从num1
中移除该位数字。
- 当
-
比较数字的一半:
- 检查
num1
是否等于num2
或者num1
是否等于num2
除以 10(处理奇数长度数字)。
- 检查
-
返回结果:
- 如果满足上述条件之一,则
x
是回文数,否则不是。
- 如果满足上述条件之一,则
代码
class Solution {
public:
bool isPalindrome(int x) {
if (x < 0 || (x % 10 == 0 && x != 0)) return false;
int num1 = x, num2 = 0;
while (num1 > num2) {
num2 = num2 * 10 + num1 % 10;
num1 /= 10;
}
return num1 == num2 || num1 == num2/10;
}
};