Leetcode 009:回文数---Python

一、写在前面

之前写过的Leetcode笔记:点击查看
今天给大家分享的是LeetCode 009:整数反转,为面试而生,期待你的加入。

二、今日题目

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

示例:

输入: 121
输出: true

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

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

三、 分析

这个题目看着不怎么难,思路和上一题有点像,就我的个人认知来说,这个题主要考察点在:对回文数的认知和遍历优化上,前者,所谓回文数,即这个数正着读和反着读都是相同的,如,2019102,反过来还是2019102;后者,看重方法。

四、解题

  • 我的方法:int转变为str,然后遍历字符串(Python里int是不可迭代的,所以得转换一下),循环比较首尾是否相等。
# -*- coding: utf-8 -*-
"""
@author = 老表
@date = 2019-08-31
@个人公众号 : 简说Python
"""


class Solution:
    def isPalindrome(self, x: int) -> bool:
        # int 转变成 str
        x = str(x)
        # 字符串长度
        l = len(x)
        # 遍历比较首尾
        for i in range(l):
            # 相等继续往后遍历
            if x[i] == x[l-i-1]:
                continue
            else:
                # 不相等,说明不是回文数,返回 False
                return False
        # 顺利遍历结束,则返回True
        return True

执行结果:

修改一下,

1、对于负数,肯定不是回文数,因为有负号
2、不转为str,自己取数逆置,比较
# -*- coding: utf-8 -*-
"""
@author = 老表
@date = 2019-08-31
@个人公众号 : 简说Python
"""


class Solution:
    def isPalindrome(self, x: int) -> bool:
        if x < 0:
            return False
        y = 0
        temp = x
        # 逆转数
        while temp != 0:
            pop = temp % 10  # 取出低位
            temp = temp // 10   # 取出剩余数
            y = y * 10 + pop   # 重新组装,低位变成高位
        if x != y:
            return False
        # 相等返回True
        return True

  • 方法二:通过之前的学习,我们知道,一些top级的代码都是使用了内置函数的,或者特殊语法,对于这题,我们也可以试试,毕竟回文数的核心在于:逆置前后相等,关键在逆置。
    Python里逆置字符串的方法,除了for遍历外,最好用的方法就是切片。
str[x:y:n]

str :字符串对象
x :起始位置(可以取到)
y :末尾(结束)位置(取不到)
n :步进(隔多远取一个数,-1表示从末尾开始取)

例如:
str = "1234"
str[1:3:1]
结果:"23"

str[0:4:2]
结果:"13"

str[::-1]
结果:"4321"
# -*- coding: utf-8 -*-
"""
@author = 老表
@date = 2019-08-31
@个人公众号 : 简说Python
"""


class Solution:
    def isPalindrome(self, x: int) -> bool:
        if x < 0:
            return False
        # 转变为字符串,切片逆置,转变为整数,比较
        if x == int(str(x)[::-1]):
            return True
        return False
  • 提交结果

五、疑惑

自从上次发现Leetcode 提交后可以查看其他解决方案,我每次做完就会看看top级的解决方法,这里分享给大家。



都用了切片来处理逆置问题,不可否认,这的确比我们自己手动处理要快很多。

六、结语

坚持就完了。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

简说Python

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值