Leetcode-9.回文数

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

示例 1:

输入: 121
输出: true
示例 2:

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

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

思路1

python提供的切片器使得字符串反转相当容易,因此这种代码精简,但不是最优的

class Solution(object):
    def isPalindrome(self, x):
        """
        :type x: int
        :rtype: bool
        """
        if str(x)==str(x)[::-1]:
            return True
        else:
            return False
        

执行用时 :56 ms, 在所有 python 提交中击败了79.38%的用户

内存消耗 :11.9 MB, 在所有 python 提交中击败了5.15%的用户

思路二

如果不用反转字符串,其实很容易想到用类似求数字各位和的算数方法。但实际写出来,提交之后发现速度不如字符串的快,于是看了一下社区的小伙伴的对此方法的改进算法,感觉非常的巧妙。

class Solution(object):
    def isPalindrome(self, x):
        """
        :type x: int
        :rtype: bool
        """
        if x < 0 or(x%10==0 and x!=0):
            return False
        ans=0
        while x>ans:         
            ans=ans*10+x%10
            x=x//10
        return True if ans==x or (ans//10)==x else False

执行用时 :44 ms, 在所有 python 提交中击败了96.46%的用户

内存消耗 :11.8 MB, 在所有 python 提交中击败了17.37%的用户

优化思路是,因为是判断回文数,所以不需要完全计算反转数再比较,只需要比较前一半和后一半的反转是否相同即可。如果数的位数是奇数,需要把后一半反转的末尾数字去掉再比较。真是巧妙的优化方案!

小总结

python字符串反转极其简单

return True if ans==x or (ans//10)==x else False

比分开写条件语句快得多

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值