LeetCode刷题实战9:求解回文数
程序IT圈
共 1458字,需浏览 3分钟
·
2020-08-13 22:40
算法的重要性,我就不多说了吧,想去大厂,就必须要经过基础知识和业务逻辑面试+算法面试。所以,为了提高大家的算法能力,这个公众号后续每天带大家做一道算法题,题目就从LeetCode上面选 !
今天和大家聊的问题叫做求解回文数,我们先来看题面:
Determine whether an integer is a palindrome. An integer is a palindrome when it reads the same backward as forward.
https://leetcode-cn.com/problems/palindrome-number
翻译
示例 1:
输入: 121
输出: true
示例 2:
输入: -121
输出: false
解释: 从左向右读, 为 -121 。从右向左读, 为 121- 。因此它不是一个回文数。
示例 3:
输入: 10
输出: false
解释: 从右向左读, 为 01 。因此它不是一个回文数。
解题分析
class Solution {
public:
bool isPalindrome(int x) {
if (x<0)
return false;
long long int sum =0;
long long int origin = x;
while(x)
{
int num = x %10;
sum = sum*10 + num;
x/=10;
}
if(sum == origin)
return true;
else
return false;
}
};
class Solution {
public:
bool isPalindrome(int x) {
// 负数肯定不是,以及首尾不对称的非0数
if(x < 0 || (x % 10 == 0 && x != 0))
return false;
int rev = 0;
while ( x > rev){
rev = rev * 10 + x % 10; //将低位一半的数取反。
x = int (x / 10);
}
//有rev >= x, 奇数情况下需要除去10
return x == rev || x == int(rev/10);
}
};
bool isPalindrome(int x) {
if (x < 0) return false;
int div = 1;
while (x / div >= 10) {
div *= 10;
}
while (x != 0) {
int l = x / div;
int r = x % 10;
if (l != r) return false;
x = (x % div) / 10; //去掉两边的数
div /= 100;
}
return true;
}
如果喜欢本文,请顺手点个赞或者转发吧。
上期推文:
评论