判断一个整数是否是回文数。回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数。
示例 1:
输入: 121
输出: true
示例 2:
输入: -121
输出: false
解释: 从左向右读, 为 -121 。 从右向左读, 为 121- 。因此它不是一个回文数。
示例 3:
输入: 10
输出: false
解释: 从右向左读, 为 01 。因此它不是一个回文数。
代码思路:
class Solution {
public:
bool isPalindrome(int x) {
if(x<0)
return 0;
int y = x;
long n = 0;
while(x!=0){
n = n * 10 + x %10;
x = x / 10;
}
if(y == n)
return 1;
else
return 0;
}
};
解题思路:
从题干知道负数不能为回文数,将这个数倒过来如果相等匹配,则为回文数。
用long的缘故是,n = n * 10 + x %10; 这个语句会导致int溢出。
结果:
改进:
代码:
class Solution {
public:
bool isPalindrome(int x) {
if(x<0||(x % 10 == 0 && x != 0))
return 0;
int n = 0;
while(x > n){
n = n * 10 + x %10;
x = x / 10;
}
if(x == n || x == n/10)//x==n/10,对付出现12,123的情况
return 1;
else
return 0;
}
};
思路:
将数字的后一半倒置过来,与前一半进行匹配,如:12321,将21倒过来与12比较,相等则为回文数;判断是否为一半数字的条件是,倒的数不小于被导数,如123 > 12 时,则进行到一半。因为是一半的数字所以更快,花费时间更少。