回文数
0.题目分析
判断一个整数是否是回文数。回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数。
首先可以分析如果这个数是负数,肯定不是回文数。
1.方法一 先将整数反转再判断
首先想到的思路是将第2道题的整数反转方法先用于整数反转,然后再判断反转前后两数字是否相同。
代码比较简单,如下:
class Solution {
public:
bool isPalindrome(int x) {
int a = 0;
int b=x;
if (x >= 0)
{
while (x / 10)
{
a = a * 10 + x % 10;
x /= 10;
}
a = a * 10 + x % 10;
if (a==b)
{
return true;
}
else
return false;
}
else
return false;
}
};
有一个循环,循环里的是常数时间复杂度,所以整体时间复杂度是O(log10N)。
2.方法二 反转一半整数
首先考虑平凡的情况:
(1).x<0 显然不是回文数
(2).如果x末尾是0,显然不是回文数。单独将它拿出来的原因是之后算法可能处理不了这种情况。
然后算法进行中怎么判断是否达到一半呢?如果该数是回文数,比如x=1221,那么将原数不断除以10,且同时得到新的数,达到中间的数的情况是x=12和a=12,如果没到达中间的情况,那么x>a;所以可以以此判断是否达到中间;如果该数不是回文数,比如x=5432,那么用此条件判断时,x=5,a=234,虽然如此,但也不影响判断。
还有一个问题是如果x是奇数怎么办?比如x=12321,此时终止循环后,x=12,a=123,只需再比较x==a/10即可。
代码如下:
class Solution {
public:
bool isPalindrome(int x) {
int a = 0;
if(x < 0 || (x % 10 == 0 && x != 0)) {
return false;
}
else
{
while (a < x)
{
a = a * 10 + x % 10;
x /= 10;
}
if (a==x||a/10==x)
{
return true;
}
else
return false;
}
}
};
虽然时间复杂度也是O(log10n)但是终止得比较早,时间如下:
相关阅读
适用于Mac和Windows的数据恢复程序不计其数。它们能帮助你恢复意外删除的文件,或被病毒夺走的数据。你应该知道当你删除一个文件后
RK3288平台下调屏参基本步骤注:因为涉及到lvds屏,mipi屏等众多类型不一的屏参调试,所以本文只记录基本调屏的一般步骤,不拿具体型号屏
最近大量的内容电商的概念炒作于各大媒体,那么内容电商简单来讲是什么?就是内容+电商两个部门组合起来的一个业务吗?这里面是不是也
使用s.size()或s.length()均可获得字符串s的长度,且二者效果相同。将英文规则名词变为复数形式的代码如下:#include <iostream> #in
编者注:因为各家平台不同,即使没有类似淘宝这样的数据统计平台,学习下思路也非常不错。数据,对于设计师来说是一件很重要的事,能够帮助