大侠刷力扣(leetcode):回文数(9)

作者:隋顺意 微信:世界上的霸主 博客:Sui_da_xia

欢迎转载,下载使用

前言

前段时间发blink,说要写刷力扣,故写此文。算法小白,如有错误,欢迎评论,如有收获,点赞评论,关注最帅(美)。

闲话少说,先来看题。

题目:

来自力扣题库9:https://leetcode-cn.com/problems/palindrome-number/

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

看到这儿,感觉这题太简单第一反应就是:把数字转换成字符串,倒转字符串但是,题目又说:

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

接下来,我介绍一种~~不作弊~~ 的方法

算法:

想要判断此数是否为回文数,先要知道啥事回文数

举个栗子:
数1234,从右往左读43211234 ≠ 4321,它不是回文数
数1221,从右往左读12211221 = 1221,它是回文数

简单思考下,发现所有的负数肯定不是回文数,所以,可以做个小弊

class Solution:
    def isPalindrome(self, x: int) -> bool:
        if x < 0:
            return False

那怎么判断呢?可以先把一个数的的回文数求出来(此处回文数指从右往左读),再比较他的回文数和原数的区别。

既是从右往左读,那第一次去它的个位,第二次取它的百位,第三次取它的千位……一直到它的首位。

如何取它的个位数呢?有个取余符号 “%”

代码示例

那数 x 举例,第一次取它的个位, 把它赋值给变量c

c = x % 10

然后把c从x中减除,并且把减完的x除以10(去除末尾的0)

x -= c
x /= 10

所以,我们就可以轻易的得出:

class Solution:
    def isPalindrome(self, x: int) -> bool:
        if x < 0:
            return False
        xxx = x
        a = 0
        b = 1
        while x != 0:
            c = x % 10
            x -= c
            a *= 10
            a += c
            x /= 10
        if a == xxx:
            return True
        else:
            return False

好处:

在官方解法里,您会发下他列举了几个特殊情况,分别是"负数",“0” 和"整十数","奇数位数"。之前,我们已经专门讲过负数了。可是,若照官网的解法,还有几种要特别列出。我这个代码是否需要呢?

可以很负责的告诉您,不需要。有兴趣的可以自己实践,这就是我的代码的好处

坏处:

凡是都有利弊,尽管我的代码可以省下许多额外的考虑,但是速度却很慢。官网的解法是反转这个数一半,这样可以快一倍。我的代码却不行。这也算是坏处吧

结语:

这就是有关力扣第九题:回文数的解决方法。大家可以使用拷贝的 代码。如果有建议,或者代码有问题,请留言评论。

有收获?点赞,关注吧。

我的赞赏码,有收获可以请我喝咖啡哦

看完记得点赞哦

发布了4 篇原创文章 · 获赞 45 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/Sui_da_xia/article/details/104770510