判断一个整数是否是回文数。回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数。
示例 1:
输入: 121
输出: true
示例 2:
输入: -121
输出: false
解释: 从左向右读, 为 -121 。 从右向左读, 为 121- 。因此它不是一个回文数。
示例 3:
输入: 10
输出: false
解释: 从右向左读, 为 01 。因此它不是一个回文数。
进阶:
你能不将整数转为字符串来解决这个问题吗?
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/palindrome-number
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
用之前回文字串的思路可以轻松解决。(倒置一下相等就可以了)
用数字的话考虑几种情况:
1.负数,必为false;
2.零,必为true;
3.正数,可以先统计一遍个数,然后通过统计的值来取最高位和最低位这样一位位比。
*要注意的越界问题。如果乘10乘10的向上乘,在只有1位数的时候乘个10就会产生越界。
public: bool isPalindrome(int x) { if(x<0) return false;//负号必不回文 if(x<10) return true;//个位数必定回文 int cur=1;//用于除最高位 int y=x; while(y>=10) { y/=10; cur*=10; } int curup=1;//用于取最低位 while(cur>=10) { if((x/cur)%10!=(x/curup)%10) return false;//对应高低位不等,则不回文 cur/=10; curup*=10; } return true;//全都相等,则回文 } };
看了眼题解。把数的后半部分反过来然后与前半部分比相等就可以了……奇数位中间的数字不影响回文
y=0;
while x>y
y=y*10+x%10
x/=10
if x==y || x==y/10
return true
原文地址:https://www.cnblogs.com/xiying159/p/11773835.html
时间: 2024-10-09 02:47:58