概述
注水博客,期末emo加摆烂,想做做简单算法抚慰心灵:
题目描述
9.回文数
给你一个整数 x
,如果 x
是一个回文整数,返回 true
;否则,返回 false
。
回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数。
例如,121
是回文,而 123
不是。
示例 1:
输入:x = 121
输出:true
示例 2:
输入:x = -121
输出:false
解释:从左向右读, 为 -121 。 从右向左读, 为 121- 。因此它不是一个回文数。
示例 3:
输入:x = 10
输出:false
解释:从右向左读, 为 01 。因此它不是一个回文数。
提示:
-231 <= x <= 231 - 1
解题思路
暴力解题:回文数判断时,一半的数字是要调换顺序来比较的,所以想到了先进后出的栈。先判断数字位数length
,确定栈的大小为length/2
,如果是奇数个数字(length%2!=0
),跳过最中间数字。最后别忘了,负数直接判错。
代码
/*大致思路*/
//算出数字位数
//用一个栈来存储判断一半的数字
bool isPalindrome(int x){
if(x < 0) return false;//为负数直接判错
int idx = 0;//循环控制变量
int temp = x;//临时变量
int length = 0;//数字位数
int top = 0;//栈顶指针
int stack[31] = {};
// 判断长度
for(idx = 0;idx < 31;++idx){
//提示给出次方不超过31
if(temp > 0) ++length;
temp/=10;
}
// 入栈
for(top = 0;top < length / 2;++top){
stack[top] = x%10;//取末尾的数入栈
x/=10;
}
// 比较
if(length%2==1){x/=10;}//如果位数是奇数,跳过判断中间的数字
for(top = length / 2 - 1;top > -1;--top){
if(stack[top]!=x%10){return false;}
x /= 10;
}
return true;
}
来源:力扣(LeetCode)
链接:https://leetcode.cn/problems/palindrome-number