判断一个整数是否是回文数。回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数。
示例:
输入: 121
输出: true
输入: -121
输出: false
解释: 从左向右读, 为 -121 。 从右向左读, 为 121- 。因此它不是一个回文数。
输入: 10
输出: false
解释: 从右向左读, 为 01 。因此它不是一个回文数。
转换成回文字符串就没意思了,所以进行整数的操作,利用取整和取余来得到想要的数字。
class Solution {
public:
bool isPalindrome(int x) {
if(x < 0) return false;
int div = 1;
while(x / div >= 10) div *= 10;
while(x > 0)
{
int left = x / div;
int right = x % 10;
if (left != right) return false;
x = (x % div) / 10;
div /= 100;
}
return true;
}
};
还有一个取巧的方法,首先判定负数和尾数为0的直接返回false,之后判断前后半段是否对称,偶数位数对称即可,奇数位数中间的数字即在后半段的最低位上。
class Solution {
public:
bool isPalindrome(int x) {
if(x < 0 || (x % 10 == 0 && x != 0)) return false;
int res = 0;
while(x > res)
{
res = res * 10 + x % 10;
x /= 10;
}
return x == res || x == res / 10;
}
};
Python版本
class Solution(object):
def isPalindrome(self, x):
"""
:type x: int
:rtype: bool
"""
'''num2 = 0
if(x<0 or (x % 10 == 0 and x != 0)):
return False
while(x > num2):
num2 = num2*10 + x % 10
x /= 10
return x == num2 or x == num2/10'''
if(x<0):
return False
else:
y = str(x)[::-1]
if y == str(x):
return True
else:
return False