( Python)LeetCode 9:回文数

 这是LeetCode里的一道简单题,拿到这个题目我第一个想的是将数据前后对比,也就是第一个数字和倒数第一个数字对比,第二个数字和倒数第二个数字对比,可能有人会疑问,数字的长度可能是奇数个也可能是偶数个,是否需要分情况讨论,实际上并不需要,并且这种前后对比的方式更快一些。

比如 12321 前后对比,第一个和最后一个相等,那么可以继续对比,2和2相等,继续,那么3和3自身相比,相等,则结束判断,这是我的一个基本的思路,这里可以做一个小的改进,比如说,如果是奇数个,假设是n,实际上只需要比对 n/2(向下取整),以12321为例,n=5,则只需要比对2次即可,因为第三个数正着数和倒着数都是同一个数,所以最后一个可以不做比较。

这里涉及了两个问题:

        ①如果是用C/C++实现的话,因为C++默认是取整的,所以5/2=2,但是Python不是,在Python中5/2=2.5,所以这里需要做类型转换。

        ②怎么求这个数的长度(有几个数),对于整数来说是没办法求的,所以,这里我第一个想法是转为字符串,那么就可以直接利用 len( ) 求这个字符串的长度。

所以最后的解决方法如下:

class Solution:
    def isPalindrome(self, x: int) -> bool:
        strX = str(x)   #转为字符串
        length = len(strX)    # 求字符串长度
        for i in range(int(length/2)):   # 长度/2 然后向下取整,获得比对次数
            if strX[i] != strX[length-1-i]: #进行比对,一旦有不一样直接返回False退出
                return False
        return True

最终的结果用时超过76%用户,还有可以继续改进的地方~

其实以前我也写过回文数的题目,但是当时是用的C++写的,相对比较复杂,Python确实让代码变得很简单。。

关于LeetCode的解题方法 欢迎大家一起讨论~

猜你喜欢

转载自blog.csdn.net/weixin_44260459/article/details/121245181
今日推荐