博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
用python手刃Leetcode(9):回文数【简单题】
阅读量:6494 次
发布时间:2019-06-24

本文共 1655 字,大约阅读时间需要 5 分钟。

前言

博客里新开一个“用python手刃Leetcode”的专题,顾名思义,主要目的是记录自己在Leetcode上刷题的过程,代码全程用python3编写,所用网址是:。这个网址的好处是:1)纯中文,解决了英语不好读题困难的问题;2)网页打开速度快。 ` 同时可以看到:目前官网给出的解题代码是用java编写的,并没有给出官方的python解答,本专栏除了尽量使用多种解法给出每道题的python3解答代码之外,还会记录下自己在做题过程中的一些收获和思考。便于以后复习查阅。

题目

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

  • 示例 1: 输入: 121 输出: true

  • 示例 2: 输入: -121 输出: false 解释: 从左向右读, 为 -121 。 从右向左读, 为 121- 。因此它不是一个回文数。

  • 示例 3: 输入: 10 输出: false 解释: 从右向左读, 为 01 。因此它不是一个回文数。

方法一:

映入脑海的第一个想法当然是将数字转换为字符串,并检查字符串是否为回文。

class Solution:    def isPalindrome(self, x):	    a = str(x)        n = len(a)#元素个数        i = 0        while i<(n//2):            if a[i] != a[n-1-i]:                return False        return True复制代码

这里用了一次循环,在没有其他思路的情况下不失为一种解决方法。但是,这种方法时间复杂度太长,在这里没法通过。

方法二:

第二种方法当然就要使用python的切片大法了。这里还详细分了两种思路:第一种思路是,我管你数字是多少,直接利用中提到的字符串反转切片大法。转了之后一比较即可。

class Solution:    def isPalindrome(self, x):        x = str(x)        return x == x[::-1]复制代码

Amazing!两行代码解决。

还有一种思路就是多考虑了一下输入的数字类型,负数肯定不会是回文数的,直接返回False 即可,所以从源头控制一下输入数据,防止做无用的转换字符串、反转操作。

class Solution:    def isPalindrome(self, x):        if x < 0:            return False                return int(str(x)[::-1]) == x复制代码

虽然代码多几行,但是速度却降下去了。

方法三:只反转一半数字

这个代码的思路是:因为对于回文数字,其后半部分反转后应该与原始数字的前半部分相同。所以只需要截取数字的后半部分并反转,然后再与前半部分比较即可。虽然思路很有意思,但是在这里,相比于上边两种方法,代码长度和时间复杂度都会变长,唯一优点是会节省一部分空间,姑且在这里贴出来。

x1 = str(x)  #将x转换成字符串        n = len(x1)  #字符串长度        if n == 1:   #如果输入是个位数,直接返回True            return True          else:            x2 = x1[n-n//2:] #截取后半段            if x1[:n//2] == x2[::-1]: #前半段和反转后的后半段比较                     return True            else:                return False复制代码

最后,调皮的官网给了一个小进阶问题,留待以后解决:

进阶: 你能不将整数转为字符串来解决这个问题吗?

转载地址:http://gtyyo.baihongyu.com/

你可能感兴趣的文章
Unix_Linux系统定时器的应用(案例)
查看>>
[Java基础] Java如何实现条件编译
查看>>
【转】ubuntu 12.04 下 Vim 插件 YouCompleteMe 的安装
查看>>
设置网页标题图标
查看>>
mysql通过查看跟踪日志跟踪执行的sql语句
查看>>
Android_CodeWiki_01
查看>>
Web QQ 协议 登录加密算法 —— VC++实现
查看>>
Nutch 二次开发之parse正文内容
查看>>
代码储存
查看>>
微信公众平台对所有公众号开放自定义菜单
查看>>
Visual C++ 2012/2013的内存溢出检測工具
查看>>
ubuntu操作系统下载
查看>>
更改git bash默认的路径
查看>>
hdu 4452 Running Rabbits 模拟
查看>>
SQL Server 储存过程的output 参数
查看>>
IOS开发中多线程的使用
查看>>
xcode6 dyld_sim is not owned by root
查看>>
Big Event in HDU(杭电1171)(多重背包)和(母函数)两种解法
查看>>
{好文备份}SQL索引一步到位
查看>>
(转)径向模糊效果shader
查看>>