LeetCode刷题(2)~回文数
题目描述
判断一个整数是否是回文数。回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数。
示例 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
- 点赞
- 收藏
- 关注作者
评论(0)