LeetCode_3:每日一题之回文数

加油💪

一、题目:

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

示例 1:

输入: 121
输出: true

示例 2:

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

示例 3:

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

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/palindrome-number
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

二、开始做题

第一次自己独立思考,独立写程序,而且是借助前两天学的一些知识😊
成绩可谓是相当的差。。。但是超开心。
方法1:Python数字转字符串
成绩:104ms,所有Python3提交中击败30.07%
13.6mb,所有Python3提交中击败5.88%
思路:将数字转换为字符串,然后通过求取字符串长度得知数字的位数,然后通过字符串切片的方式进行首尾对比。

class Solution:
    def isPalindrome(self, x: int) -> bool:
        s = str(x)
        num = len(s)
        k = int(num/2)
        for i in range(k):
            if s[i:i+1]==s[num-i-1:num-i]:
                continue
            else:
                return False

        return  True

方法2和3:Python
以下两种都比我的好。。。哎也都比较简单,就不讲解逻辑了。

class Solution:

    # 方法一: 将int转化成str类型: 双向队列
    # 复杂度: O(n^2) [每次pop(0)都是O(n)..比较费时]
    def isPalindrome(x: int) -> bool:
        lst = list(str(x))
        while len(lst) > 1:
            if lst.pop(0) != lst.pop():
                return  False
        return True


    # 方法二: 将int转化成str类型: 双指针 (指针的性能一直都挺高的)
    # 复杂度: O(n)
    def isPalindrome(x: int) -> bool:
        lst = list(str(x))
        L, R = 0, len(lst)-1
        while L <= R:
            if lst[L] != lst[R]:
                return  False
            L += 1
            R -= 1
        return True

方法三:C++
思路很简单,他分成了奇数位数和偶数位数。。。语法也比较简单。。只是人家想的很全面,而且C++本来就效率高,这也是我一直不想放弃C++的原因,就是难写,事情多,语法多。。。

class Solution {
public:
    bool isPalindrome(int x) {
        // 特殊情况:
        // 如上所述,当 x < 0 时,x 不是回文数。
        // 同样地,如果数字的最后一位是 0,为了使该数字为回文,
        // 则其第一位数字也应该是 0
        // 只有 0 满足这一属性
        if (x < 0 || (x % 10 == 0 && x != 0)) {
            return false;
        }

        int revertedNumber = 0;
        while (x > revertedNumber) {
            revertedNumber = revertedNumber * 10 + x % 10;
            x /= 10;
        }

        // 当数字长度为奇数时,我们可以通过 revertedNumber/10 去除处于中位的数字。
        // 例如,当输入为 12321 时,在 while 循环的末尾我们可以得到 x = 12,revertedNumber = 123,
        // 由于处于中位的数字不影响回文(它总是与自己相等),所以我们可以简单地将其去除。
        return x == revertedNumber || x == revertedNumber / 10;
    }
};

三、知识点总结

1.list()可以把str转化为列表,然后用上list的武器
(1)双向队列可以用pop函数进行弹出。
默认删除最后一个列表值:pop()
删除第一个元素:pop(0)
(2)双指针的方式,效率高。
例如:lst[L] != lst[R]
2.反序字符串:str(x)[::-1]。
此处涉及Python语法: str[起始位置:终止位置:步长]
return(str(x)==str(x)[::-1])一句话解决回文数问题。一句话!!!!我***服了。。。这难道就是所谓的秀儿?下面是一句话的成绩图:
在这里插入图片描述

四、个人感受

自己解决问题很锻炼自己的思维逻辑能力、算法储备、编程功底。但是。。。我的后两样都不太行。最终LeetCode简单题回文数,自己做的答案与别人相差甚远,前路漫漫,仍需努力啊!如果兄弟看到这里,希望能给个赞,互相鼓励下,谢谢了。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值