首页 > 其他分享 >LeetCode刷题(2)~回文数

LeetCode刷题(2)~回文数

时间:2023-01-12 15:37:14浏览次数:66  
标签:10 return int result false 刷题 LeetCode 回文


题目描述

        判断一个整数是否是回文数。回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数。

示例 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;
}
};

运行结果

LeetCode刷题(2)~回文数_运行环境


思路

        从三个测试案例可以大概得知,当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

相关文章