题目:
给你一个整数 x ,如果 x 是一个回文整数,返回 true ;否则,返回 false 。
回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数。
例如,121 是回文,而 123 不是。
思路一:
将整型转为字符串,再利用反转字符串函数,判断是否是回文数。
C++源码:
class Solution {
public:
bool isPalindrome(int x) {
string str_x = to_string(x); //int x转string x
string str_y = to_string(x); //int x转string y
reverse(str_x.begin(),str_x.end()); //反转字符串x
return str_x==str_y;
}
};
思路二:
反转一半数字后判断是否是回文数。一个数反转后还是本身,负数不可反转,10的倍数反转后比原数少一位;取走尾数后x缩小10倍,反转了一半数字时reversed_x比x多一位时,必然比x大;x位数为偶数位时,反转了一半数字时reversed_x可能与x同位。
C++源码:
class Solution {
public:
bool isPalindrome(int x) {
if (x < 9 && x >= 0) //0-9是回文数
return true;
if (x < 0 || x%10 == 0 ) //负数和10的倍数不是回文数
return false;
int reversed_x = 0; //初始化
/*
每次将x的尾数赋给reversed_x,将x缩小10倍
终止条件:反转了一半数字
*/
for(int i = 1; reversed_x < x; i = 10){
reversed_x = (reversed_x * i) + (x % 10) ;
x /= 10;
}
return reversed_x == x || reversed_x/10 == x;
}
};