题目描述
判断一个整数是否是回文数。回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数。
示例 1:
输入: 121
输出: true
示例 2:
输入: -121
输出: false
解释: 从左向右读, 为 -121 。 从右向左读, 为 121- 。因此它不是一个回文数。
示例 3:
输入: 10
输出: false
解释: 从右向左读, 为 01 。因此它不是一个回文数。
解答 By 海轰
提交代码
class Solution {
public:
long huwen(int x)
{
long result=0;
while(x!=0)
{
result=result*10+x%10;
x/=10;
}
return result;
}
bool isPalindrome(int x) {
if(x<0||(x%5==0&&x%2==0&&x!=0)) return false;
if(x==huwen(x)) return true;
return false;
}
};
运行结果
思路
从三个测试案例可以大概得知,当x为负数和x最后一位是0的时候,返回false;当x为正数的时候,则需要判断是否为回文数。这里海轰另外写了一个huwen()函数,用来返回任意数反转后的值。
- 若x为负数或最后一位是0,return false
- 若为正数,与反转后的数进行比较,相同则return turn,反之 return false
注:这里思路其实不难,但是海轰还是提交了快六次,因为在判断最后一位为0的时候,出了一些错。起初是利用 与运算 ,与1进行,没有发现类似8,88的二进制最后一位也是0。后面发现只要同时可以被0或5整除(余数为0),那么最后一位一定为0。emm,其实这里还忽略了,个位数0,题目也是判断为回文数。所以在判断的时候还是需要单独考虑0。
C++完整测试程序demo
// 运行环境:vscode
#include<iostream>
using namespace std;
int huwen(int x)
{
int result=0;
while(x!=0)
{
result=result*10+x%10;
x/=10;
}
return result;
}
bool isPalindrome(int x) {
if(x<0||(x%5==0&&x%2==0&&x!=0)) return false;
if(x==huwen(x)) return true;
return false;
}
int main(){
cout<<isPalindrome(121)<<endl;// 回文数 1
cout<<isPalindrome(-121)<<endl;// 不是回文数 0
cout<<isPalindrome(10)<<endl;// 不是回文数 0
cout<<isPalindrome(0)<<endl;// 回文数 1
cout<<isPalindrome(8)<<endl; // 回文数 1
cout<<isPalindrome(88888)<<endl;// 回文数 1
return 0;
}
优化
方法:反转一半数字
详解:传送门
class Solution {
public:
bool isPalindrome(int x) {
if(x<0||(x%10==0&&x!=0)) return false;
int temp=0;
while(x>temp)
{
temp=temp*10+x%10;
x/=10;
}
return x==temp||x==temp/10;
}
};
标签:10,return,int,result,false,刷题,LeetCode,回文 From: https://blog.51cto.com/u_15939722/6004355