题目描述
给你一个整数 x ,如果 x 是一个回文整数,返回 true ;否则,返回 false。
回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数。
- 例如:
121是回文;-121不是回文,负数带负号一定不可能回文;123不是回文。
示例 1 输入:
x = 121输出:true
示例 2 输入:x = -121输出:false
思路分析
栈:后进先出;队列:先进先出
- 负数直接返回
false,负数不可能是回文。 - 将数字每一位拆开,同时压入栈、入队列 。
- 取个位:
tmp % 10 - 去掉个位:
tmp /= 10
- 取个位:
- 栈取栈顶(最后存入的数字,相当于数字逆序);队列取队头(最先存入的数字,数字原顺序)。
- 逐位对比:一旦不相等,直接返回
false;全部相等则为回文,返回true。
cpp
#include <stack>
#include <queue>
using namespace std;
class Solution {
public:
bool isPalindrome(int x) {
if(x < 0) return false;
int tmp = x;
stack<int>st;
queue<int>q;
while(tmp>0)
{
st.push(tmp%10);
q.push(tmp%10);
tmp /= 10;
}
while(!st.empty())
{
if(st.top() != q.front())
return false;
st.pop();
q.pop();
}
return true;
}
};