问题描述:
判断一个整数是否是回文数。回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数。
示例 1:
输入: 121
输出: true
示例 2:
输入: -121
输出: false
解释: 从左向右读, 为 -121 。 从右向左读, 为 121- 。因此它不是一个回文数。
示例 3:
输入: 10
输出: false
解释: 从右向左读, 为 01 。因此它不是一个回文数。
进阶:
你能不将整数转为字符串来解决这个问题吗?
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/palindrome-number
解法一:
将给出的数字进行判断,如果是负数立刻返回false,然后转成字符串进行判断。
代码如下:
class Solution {
public:
bool isPalindrome(int x) {
if(x < 0) return false;
string s = to_string(x);
int n = s.length()-1;
for(int i = 0 ; i < s.length(); i++){
if(i==n){
return true;
}
if(s[i] != s[n]){
return false;
}
n--;
}
return true;
}
};
这个方法效率不高。
解法二:
是用数学方法解决,代码如下:
class Solution {
public:
bool isPalindrome(int x) {
if(x < 0) return false;
if(x == 0) return true;
int temp = x;
int n = 0;
while(temp > 0){
temp /= 10;
n++;
}
if(n == 1) return true;
temp = 0;
for(int i = 0; i< n/2 ;i++){
temp = temp*10 + x % 10;
x /= 10;
}
if(n%2 == 0){
if(x == temp) return true;
}
else{
x = x / 10;
if(x == temp) return true;
}
return false;
}
};
来源:https://blog.csdn.net/qq_39157144/article/details/100935388