必威体育Betway必威体育官网
当前位置:首页 > IT技术

【LeetCode】3.回文数

时间:2019-10-01 21:13:23来源:IT技术作者:seo实验室小编阅读:90次「手机版」
 

回文数

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)但是终止得比较早,时间如下:

相关阅读

15 款 Windows 的数据恢复工具

适用于Mac和Windows的数据恢复程序不计其数。它们能帮助你恢复意外删除的文件,或被病毒夺走的数据。你应该知道当你删除一个文件后

RK3288平台下调屏参基本步骤

RK3288平台下调屏参基本步骤注:因为涉及到lvds屏,mipi屏等众多类型不一的屏参调试,所以本文只记录基本调屏的一般步骤,不拿具体型号屏

产品设计中的那些谎言03:内容电商是不是一个谎言?

最近大量的内容电商的概念炒作于各大媒体,那么内容电商简单来讲是什么?就是内容+电商两个部门组合起来的一个业务吗?这里面是不是也

将英文规则名词变为复数形式

使用s.size()或s.length()均可获得字符串s的长度,且二者效果相同。将英文规则名词变为复数形式的代码如下:#include <iostream> #in

设计师如何从「点线面」掌握分析数据的方法?

编者注:因为各家平台不同,即使没有类似淘宝这样的数据统计平台,学习下思路也非常不错。数据,对于设计师来说是一件很重要的事,能够帮助

分享到:

栏目导航

推荐阅读

热门阅读