LeetCode刷题(2)~回文数

举报
海轰Pro 发表于 2021/08/05 23:44:37 2021/08/05
【摘要】 题目描述         判断一个整数是否是回文数。回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数。 示例 1: 输入: 121 输出: true 示例 2: 输入: -121 输出: false 解释: 从左向右读, 为 -121 。 从右向左读, ...

题目描述

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

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

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18

运行结果
在这里插入图片描述
思路
        从三个测试案例可以大概得知,当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;
}

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28

优化

方法:反转一半数字
详解:传送门

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

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13

题目来源

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/palindrome-number

文章来源: haihong.blog.csdn.net,作者:海轰Pro,版权归原作者所有,如需转载,请联系作者。

原文链接:haihong.blog.csdn.net/article/details/107615300

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。