百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术资源 > 正文

一起刷题(leetcode)第二篇:如何用Python实现递归

off999 2024-10-09 14:04 42 浏览 0 评论

前言

我们知道递归是一类比较巧妙但是理解难度有点大的算法,对于工作中需要用到数据结构和高级算法的人需要牢固掌握递归算法。今天就以实际的案例来带大家一起学习和理解如何用Python实现递归算法。



升序列表合并

题目:

将两个升序链表合并为一个新的 升序 链表并返回。
新链表是通过拼接给定的两个链表的所有节点组成的。
?
示例:
?
输入:1->2->4, 1->3->4
输出:1->1->2->3->4->4

对于这一道关于链表的问题,由于要求新的链表是通过改变原来两个链表,所以我们不可以新建一个链表来搭建新的链表而是在原来链表基础上改变链表节点中的指向。

我们发现,合并两个链表可以拆解成合并一个链表的指向以及链表的一个节点。由于原问题和子问题具有相同的结构,因此我们可以考虑使用自上而下的递归来解决:

class Solution:
    def mergeTwoLists(self, l1, l2):
        if l1 is None:
            return l2
        elif l2 is None:
            return l1
        elif l1.val < l2.val:
            l1.next = self.mergeTwoLists(l1.next, l2)
            return l1
        else:
            l2.next = self.mergeTwoLists(l1, l2.next)
            return l2


值得注意的是,这里的mergeTwolists函数在类中,调用的话需要在前面加上self。可以代码看出来递归写起来形式非常简单。


对称二叉树

题目:

给定一个二叉树,检查它是否是镜像对称的。

例如,二叉树 [1,2,2,3,4,4,3] 是对称的。

    1
   / \
  2   2
 / \ / \
3  4 4  3
 

但是下面这个 [1,2,2,null,3,null,3] 则不是镜像对称的:

    1
   / \
  2   2
   \   \
   3    3
 

对于二叉树,我们其实有两种遍历方法:广度优先搜索以及深度优先搜索。从字面的意思就可以理解,广度优先是一层层搜索,需要用到“队列”这种数据结构。而深度优先是一条道走到黑,走到最深处后再搜索另一条路径,可以用递归的方法来完成:

class Solution:
    def isSymmetric(self, root: TreeNode) -> bool:
        if not root: 
            return True
        else:
            return self.isSymmetricTree(root.left, 
            root.right)
?
    def isSymmetricTree(self, left, right):
        if left is None and right is None: return True   #同时为空
        if left is None or right is None : return False  #一个为空 
        if left.val != right.val : return False          # 值不相等 !!
        return self.isSymmetricTree(left.left, right.right)
         and self.isSymmetricTree(left.right, right.left)

在第一个函数isSymmetric中,我们考虑到一种特殊情况就是树为空,同时由于题目给定的函数输入只有一个节点,不适合作为递归函数,因此我们需要额外定义一个新的函数isSymmetricTree来实现递归。


二叉树的最大深度

题目:

给定一个二叉树,找出其最大深度。
二叉树的深度为根节点到最远叶子节点的最长路径上的节点数。
说明: 叶子节点是指没有子节点的节点。
?
示例:
给定二叉树 [3,9,20,null,null,15,7],
?
    3
   / \
  9  20
    /  \
   15   7
返回它的最大深度 3 。

这道题和上面对称二叉树都是针对二叉树的,因此也适合用递归实现深度优先搜索来计算二叉树的最大深度:

class Solution:
    def maxDepth(self, root: TreeNode) -> int:
        if not root:
            return 0
        if not root.left and not root.right:
            return 1
        
        left = self.maxDepth(root.left)
        right = self.maxDepth(root.right)
        return 1+max(left,right)

这里我们本身定义的函数的输入是一个节点,可以用来作为递归函数。

相关推荐

Python Flask 容器化应用链路可观测

简介Flask是一个基于Python的轻量级Web应用框架,因其简洁灵活而被称为“微框架”。它提供了Web开发所需的核心功能,如请求处理、路由管理等,但不会强制开发者使用特定的工具或库。...

Python GUI应用开发快速入门(python开发软件教程)

一、GUI开发基础1.主流GUI框架对比表1PythonGUI框架比较框架特点适用场景学习曲线Tkinter内置库,简单小型应用,快速原型平缓PyQt功能强大,商用许可专业级桌面应用陡峭PySi...

【MCP实战】Python构建MCP应用全攻略:从入门到实战!

实战揭秘:Python Toga 打造跨平台 GUI 应用的神奇之旅

在Python的世界里,GUI(图形用户界面)开发工具众多,但要找到一款真正跨平台、易于使用且功能强大的工具并不容易。今天,我们就来深入探讨一下Toga——一款Python原生、操作系统原...

python应用目录规划(python的目录)

Python大型应用目录结构规划(企业级最佳实践)核心原则模块化:按业务功能拆分,高内聚低耦合可扩展性:支持插件机制和动态加载环境隔离:清晰区分开发/测试/生产环境自动化:内置标准化的构建测试部署流...

Python图形化应用开发框架:PyQt开发简介

PyQt概述定义:PyQt是Python绑定Qt框架的工具集,用于开发跨平台GUI应用程序原理:通过Qt的C++库提供底层功能,PyQt使用SIP工具生成Python绑定特点:支持Windows/ma...

[python] 基于PyOD库实现数据异常检测

PyOD是一个全面且易于使用的Python库,专门用于检测多变量数据中的异常点或离群点。异常点是指那些与大多数数据点显著不同的数据,它们可能表示错误、噪声或潜在的有趣现象。无论是处理小规模项目还是大型...

Python、Selenium 和 Allure 进行 UI 自动化测试的简单示例脚本

环境准备确保你已经安装了以下库:SeleniumAllurepytest你可以使用以下命令安装所需库:pipinstallseleniumallure-pytestpytest示例代码下面的代...

LabVIEW 与 Python 融合:打造强大测试系统的利器

在现代测试系统开发领域,LabVIEW和Python各自凭借独特优势占据重要地位。LabVIEW以图形化编程、仪器控制和实时系统开发能力见长;Python则凭借丰富的库资源、简洁语法和强大数...

软件测试进阶之自动化测试——python+appium实例

扼要:1、了解python+appium进行APP的自动化测试实例;2、能根据实例进行实训操作;本课程主要讲述用python+appium对APP进行UI自动化测试的例子。appium支持Androi...

Python openpyxl:读写样式Excel一条龙,测试报表必备!

无论你是测试工程师、数据分析师,还是想批量导出Excel的自动化工作者,只需一个库openpyxl,即可高效搞定Excel的各种需求!为什么选择openpyxl?支持.xlsx格式...

Python + Pytest 测试框架——数据驱动

引言前面已经和大家介绍过Unittest测试框架的数据驱动框架DDT,以及其实现原理。今天和大家分享的是Pytest测试框架的数据驱动,Pytest测试框架的数据驱动是由pytest自...

这款开源测试神器,圆了我玩游戏不用动手的梦想

作者:HelloGitHub-Anthony一天我在公司用手机看游戏直播,同事问我在玩什么游戏?我和他说在看直播,他恍然大悟:原来如此,我还纳闷你玩游戏,咋不用动手呢。。。。一语惊醒梦中人:玩游戏不用...

Python单元测试框架对比(pycharm 单元测试)

一、核心框架对比特性unittest(标准库)pytest(主流第三方)nose2(unittest扩展)doctest(文档测试)安装Python标准库pipinstallpytestp...

利用机器学习,进行人体33个2D姿态检测与评估

前几期的文章,我们分享了人脸468点检测与人手28点检测的代码实现过程,本期我们进行人体姿态的检测与评估通过视频进行人体姿势估计在各种应用中起着至关重要的作用,例如量化体育锻炼,手语识别和全身手势控制...

取消回复欢迎 发表评论: