题目描述
判断一个整数是否是回文数。回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数。
样例
输入: 121
输出: true
输入: -121
输出: false
解释: 从左向右读, 为 -121 。 从右向左读, 为 121- 。因此它不是一个回文数。
输入: 10
输出: false
解释: 从右向左读, 为 01 。因此它不是一个回文数。
3种算法
C++ 代码
class Solution {
public:
bool isPalindrome(int _x) {
if(_x == 0) return true;
if(_x < 0 || _x % 10 == 0) return false; // 负数和整十数
bool f1 = false, f2 = false, f3 = false;
// 字符串两头遍历法
string s = to_string(_x);
int l = 0, r = s.size() - 1;
while(l < r)
{
if(s[l++] != s[r--]) return false;
}
f1 = true;
// 栈
stack<char> sta;
s = to_string(_x);
for(auto t : s)
sta.push(t);
for(auto t : s)
{
if(sta.top() != t)
return false;
sta.pop();
}
f2 = true;
// 整数取余翻转(溢出问题)
int x1 = _x, x2 = 0;
while(x1)
{
x2 = x2 * 10 + x1 % 10;
x1 /= 10;
}
if(_x != x2) return false;
f3 = true;
return (f1 && f2 && f3);
}
};