题目描述
判断一个整数是否是回文数。回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数。
示例 1:
输入: 121
输出: true
示例 2:
输入: -121
输出: false
解释: 从左向右读, 为 -121 。 从右向左读, 为 121- 。因此它不是一个回文数。
示例 3:
输入: 10
输出: false
解释: 从右向左读, 为 01 。因此它不是一个回文数。
进阶:
你能不将整数转为字符串来解决这个问题吗?
题目分析
本题可以使用数字直接进行反转比较,也可以转换成字符串进行比较。Java和Python对字符串操作比较简单,故代码也使用字符串进行处理。
对于数字,首先排除负数,由题可知,负数一定不是回文数。然后,对非负数进行反转处理,处理时需要注意溢出问题。
对于字符串,直接将数字转换成字符串,并进行反转操作,比较二者是否相同。
代码实现
C++
/*
* @lc app=leetcode.cn id=9 lang=cpp
*
* [9] 回文数
*/
// @lc code=start
class Solution {
public:
bool isPalindrome(int x) {
if(x < 0){
return false;
}
int ans = 0;
int yu,shang = x;
while(shang != 0){
yu = shang % 10;
shang = shang / 10;
if(ans > 214748364){
return false;
}
if(ans == 214748364 && yu >= 8){
return false;
}
ans = ans*10 + yu;
}
if(ans == x){
return true;
}
else{
return false;
}
}
};
// @lc code=end
Java
/*
* @lc app=leetcode.cn id=9 lang=java
*
* [9] 回文数
*/
// @lc code=start
class Solution {
public boolean isPalindrome(int x) {
String x_str = String.valueOf(x);
StringBuffer xb = new StringBuffer(x_str);
String x_reverse = xb.reverse().toString();
if(x_str.compareTo(x_reverse) == 0){
return true;
}
else{
return false;
}
}
}
// @lc code=end
Python
#
# @lc app=leetcode.cn id=9 lang=python3
#
# [9] 回文数
#
# @lc code=start
class Solution:
def isPalindrome(self, x: int) -> bool:
x_str = str(x)
x_reverse = x_str[::-1]
if(x_str == x_reverse):
return True
else:
return False
# @lc code=end