LeetCode刷题总结(Python语言版)

编程总结

每每刷完一道题后,其思想和精妙之处没有地方记录,本篇博客用以记录刷题过程中的遇到的算法和技巧

009)回文数

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

#-*-coding: utf-8-*-
class Solution:
    def isPalindrome(self, x):
        if x < 0 or (x > 0 and x % 10 == 0): return False
        else:
           x = str(x)
           return x == x[::-1]

007)整数反转

class Solution:
    def reverse(self, x: int) -> int:    # "x: int) -> int:" 为类注释
        if -10 < x < 10:
            return x
        str_x = str(x)           # 强制转为str类型
        if str_x[0] != "-":
            str_x = str_x[::-1]  # 逆序输出
            x = int(str_x)       # 强制转化为int类型
        else:
            str_x = str_x[:0:-1] 
            x = int(str_x)
            x = -x
        return x if -2147483648 < x < 2147483647 else 0
   
if __name__=="__main__":
    a = Solution()               # 创建i对象,将类实例化
    print("the result is", a.reverse(-32326))  # 调用类的方法

349)给定两个数组,编写一个函数来计算它们的交集

示例 1:
输入: nums1 = [1,2,2,1], nums2 = [2,2]
输出: [2]
示例 2:
输入: nums1 = [4,9,5], nums2 = [9,4,9,8,4]
输出: [9,4]

说明:
输出结果中的每个元素一定是唯一的。
我们可以不考虑输出结果的顺序。
题解:
将数组转为set集合处理,利用set集合可以直接求解交集(&)

class Solution:
    def intersection(self, nums1, nums2):
        """
        :type nums1: List[int]
        :type nums2: List[int]
        :rtype: List[int]
        """  
        set1 = set(nums1)
        set2 = set(nums2)
        return (set2 & set1)

在这里插入图片描述

344)反转字符串

编写一个函数,其作用是将输入的字符串反转过来。输入字符串以字符数组 char[] 的形式给出。
不要给另外的数组分配额外的空间,你必须原地修改输入数组、使用 O(1) 的额外空间解决这一问题。
你可以假设数组中的所有字符都是 ASCII 码表中的可打印字符

class Solution:
    def reverseString(self, s: List[str]) -> None:
        length = len(s)
        if length < 2:
            return 
        for i in range(length//2): # 注意这里的 地板除
            s[i], s[length - i -1] = s[length - i -1], s[i]
        return 

// 称为地板除,两个整数的除法仍然是整数,它总是会舍去小数部分,返回数字序列中比真正的商小的,最接近的数字。
/ 除法计算结果是浮点数,即使是两个整数恰好整除,结果也是浮点数。

387)字符串中的第一个唯一字符

给定一个字符串,找到它的第一个不重复的字符,并返回它的索引。如果不存在,则返回 -1。
s = “leetcode”
返回 0.
s = “loveleetcode”,
返回 2.

chr() 用一个范围在 range(256)内的(就是0~255)整数作参数,返回一个对应的字符。
zip() 函数用于将可迭代的对象作为参数,将对象中对应的元素打包成一个个元组,然后返回由这些元组组成的列表。

class Solution:
    def firstUniqChar(self, s: str) -> int:
        # hash ,26 个字母为键值的字典
        words = [chr(i) for i in range(97, 123)] #[a - z]
        values = [0] * 26
        wordsDic = dict(zip(words, values))
        for word in s:
            wordsDic[word] += 1
        for i in range(len(s)):
            if wordsDic[s[i]] == 1:
                return i
        return -1

242)有效的字母异位词

给定两个字符串 s 和 t ,编写一个函数来判断 t 是否是 s 的字母异位词。

输入: s = “anagram”, t = “nagaram”
输出: true

class Solution:
    def isAnagram(self, s: str, t: str) -> bool:
        words = [chr(i) for i in range(97, 123)]
        values = [0] * 26
        wordsDic_s = dict(zip(words, values)) # 构造一个字典
        # 下述中哪个字符串大,将哪个字符串归为字典组,另一个在这个字典组里去重
        if (len(s) > len(t)):   
            for word in s:
                wordsDic_s[word] += 1 
            for i in range(len(t)):
                wordsDic_s[t[i]] -= 1
            for i in range(len(s)):  # 最后检查去重后的结果,如果有非零值,则FALSE
                if (wordsDic_s[s[i]] != 0):
                    return 0
        else :
            for word in t:
                wordsDic_s[word] += 1 
            for i in range(len(s)):
                wordsDic_s[s[i]] -= 1
            for i in range(len(t)):
                if (wordsDic_s[t[i]] != 0):
                    return 0
        return 1

204)计数质数

统计所有小于非负整数 n 的质数的数量。
示例:
输入: 10
输出: 4
解释: 小于 10 的质数一共有 4 个, 它们是 2, 3, 5, 7 。

class Solution:
    def countPrimes(self, n: int) -> int:
        if n < 3:
            return 0     
        else:
            # 首先生成了一个全部为1的列表
            output = [1] * n
            # 因为0和1不是质数,所以列表的前两个位置赋值为0
            output[0],output[1] = 0,0
             # 此时从index = 2开始遍历,output[2]==1,即表明第一个质数为2,然后将2的倍数对应的索引
             # 全部赋值为0. 此时output[3] == 1,即表明下一个质数为3,同样划去3的倍数.以此类推.
            for i in range(2,int(pow(n, 0.5)+1)):  #埃拉托斯特尼筛法已经证明:要得到自然数n以内的全部质数,必须把不大于根号n的所有质数的倍数剔除,剩下的都是质数。
                if output[i] == 1:
                    output[i*i : n : i] = [0] * len(output[i*i : n : i])  #切片:object[start_index : end_index : step], 将所有 i 的倍数(i*i)筛出掉
         # 最后output中的数字1表明该位置上的索引数为质数,然后求和即可.
        return sum(output)
### 回答1: LeetCode 是一个在线编程挑战网站,提供了许多算法和数据结构题目供程序员练习和提高。下面是一些关于使用 PythonLeetCode 的提示: 1. 首先,了解题目的要求和限制,并确定解题思路。 2. 使用自己熟悉的编程语言(如 Python)进行编码。 3. 在完成编码后,进行单元测试,确保代码的正确性。 4. 提交代码,查看结果。如果错误,请思考错误原因并进行调试。 5. 反复做题,提高自己的算法和数据结构能力。 6. 可以参考其他人的题解和代码,可以更好的学习和了解题目的解法。 ### 回答2: LeetCode是一款非常好的刷题平台,它提供了大量的算法题目,帮助程序员们提高编程技能。但是,想要刷好LeetCode需要一些方法和技巧。本篇文章主要介绍LeetCode刷题指南,特别是使用Python语言刷题。 首先,我们需要明确一个问题:刷LeetCode最重要的是什么?我认为是“理解算法”。很多人最开始刷LeetCode时会想直接写代码试试,这是错误的做法。我们首先需要理解题目的意思,思考算法的解题思路,以及算法的时间复杂度和空间复杂度等问题。只有当我们弄懂了算法的思路,才能够写出高质量的代码。 其次,我们需要建立良好的代码习惯。Python是一门非常简洁优雅的语言,但是我们需要注意代码的可读性和规范性,这样在后期维护代码时会更加方便。建议使用pycharm等IDE工具,并安装Pylint等插件进行代码检查和优化。 接下来,我们需要准备好一些有效的刷题工具。为了方便,我们可以在本地安装刷题必备工具,例如:leetcode-cli、leetcode vscode插件、leetcode-cn的官方Python SDK等。这些工具可以帮助我们快速地创建、调试和提交题解,并且可以方便地查看题目和测试样例。另外,我们还可以用一些在线的工具,如Jupyter Notebook、Google Colab等来刷题。 最后,我们需要保持耐心和持之以恒的心态。LeetCode刷题不是一蹴而就的事情,需要坚持不懈地努力。每道题都应该认真思考,从简单到复杂、从容易到难以深入理解,跟着题目一步步实现代码解题。通过刷题,我们可以锻炼自己的编程技能、提高算法水平、积累自己的编程经验。 总之,LeetCode是一款非常优秀的算法题目平台,它可以帮助程序员们提高编程水平。使用Python语言刷题,需要我们掌握好编程思路,建立好良好的代码习惯,使用好刷题工具,并坚持不懈地刷题去提升自己的能力。 ### 回答3: 随着人工智能和大数据技术的快速发展,编程成为了一项越来越重要的技能。而刷leetcode算法题是提高编程技能、增加算法思维的有力方式之一。本文主要介绍如何通过Python语言刷leetcode算法题。 一、准备工作 1.安装Python环境 Python是一种优秀的面向对象的解释型计算机程序设计语言,在如今的人工智能和数据科学领域应用广泛。首先需要安装Python环境,推荐安装版本为Python 3.x。 2.注册LeetCode账号 可以通过该网站进行LeetCode算法刷题,而注册账号是必选步骤。 二、解题流程 1.题目分析:初学者可先从LeetCode官方题解中找到简单难度的题目,通过阅读题目,明确题目的意义,梳理解题思路和关键信息。 2.思路整理:理清题目后,可以尝试使用笔和纸来将题目要求和信息进行抽象和总结。可以画图或列出清晰的步骤,为编写代码提供思路。 3.编写代码:将思路转化为代码实现。结合算法,通过Python语言的面向对象编程,从而完成代码的编写。 4.测试和优化:在完成编码后,需要对代码进行测试,并对代码进行优化处理。可以通过LeetCode的自动评测系统,检查代码运行是否正确。此步骤也有助于人为地检查代码中的错误,提高代码的效率和质量。 5.总结归纳:在完成一定数量的算法刷题后,可以对做题有所总结和归纳。思考算法题的分类和解题的技巧,这有助于加深理解并提高解题效率。 三、学习资源 1. LeetCode官方网站:www.leetcode.com 2. 《Python Algorithm Interview》 3. 《算法图解》 4. 数字图书馆:https://www.gitbook.com/book/jalan/leetcode-python/details 5. Github仓库:https://github.com/yuzhoujr/leetcode-python 总结一下,刷LeetCode题目是提高自己的算法和编程能力的好方法,Python语言无疑是实现目标的好选择;同时,在刷题过程中,理清题目并充分思考,多测试,总结归纳同样重要。希望以上的介绍有助于您更好地学习和刷题
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值