2021秋招-算法-递归

算法-递归

教程:

⭐告别递归,谈谈我的一些经验

LeetCode刷题总结-递归篇

基础框架

leetcode刷题

1.leetcode-101. 对称二叉树-简单

101. 对称二叉树
给定一个二叉树,检查它是否是镜像对称的。
例如,二叉树 [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
# Definition for a binary tree node.
# class TreeNode:
#     def __init__(self, x):
#         self.val = x
#         self.left = None
#         self.right = Noneclass Solution:def isMirror(self,t1,t2):if not t1 and not t2:return Trueif not t1 or not t2:return Falsereturn t1.val == t2.val and self.isMirror(t1.right,t2.left) and self.isMirror(t1.left,t2.right)def isSymmetric(self, root: TreeNode) -> bool:# 递归算法if not root:return Truereturn self.isMirror(root.left,root.right)'''# 非递归: BFS判断当前层元素是否为对称res = []if not root:return Truequeue = [root]row = 1while queue:line_res = []queue_size = len(queue)# 将当前队列元素向四周扩散for i in range(queue_size):curNode = queue.pop(0)# 划重点: 判断是否到达终止if curNode:line_res.append(curNode.val)queue.append(curNode.left)queue.append(curNode.right)else:line_res.append('null')# 判断当前层是否符合镜像二叉树要求if len(line_res) % 2 != 0 and row != 1: return Falseback = line_res[::-1]if line_res != back:return Falserow += 1 return True'''

2.剑指 Offer 24. 反转链表-简单

剑指 Offer 24. 反转链表
定义一个函数,输入一个链表的头节点,反转该链表并输出反转后链表的头节点。示例:
输入: 1->2->3->4->5->NULL
输出: 5->4->3->2->1->NULL
  • python 递归方法:
    在这里插入图片描述
# Definition for singly-linked list.
# class ListNode:
#     def __init__(self, x):
#         self.val = x
#         self.next = Noneclass Solution:def reverseList(self, head: ListNode) -> ListNode:if head == None or head.next == None:return head# 递归子链表# 下层递归返回值cur = self.reverseList(head.next)head.next.next = headhead.next = Nonereturn cur
  • python迭代方法:
# Definition for singly-linked list.
# class ListNode:
#     def __init__(self, x):
#         self.val = x
#         self.next = Noneclass Solution:def reverseList(self, head: ListNode) -> ListNode:if not head:return None        pHead = headpTmp1 = head# 下面两条顺序不能变化,否则就会报错; pHead = pHead.nextpTmp1.next = Nonewhile pHead:# 原则: 两前1后指针pTmp2 = pHead.nextpHead.next = pTmp1pTmp1 = pHeadpHead = pTmp2return pTmp1

3.leetcode-25. K 个一组翻转链表

25. K 个一组翻转链表难度困难639收藏分享切换为英文关注反馈给你一个链表,
每 k 个节点一组进行翻转,请你返回翻转后的链表。
k 是一个正整数,它的值小于或等于链表的长度。
如果节点总数不是 k 的整数倍,那么请将最后剩余的节点保持原有顺序。
示例:
给你这个链表:1->2->3->4->5
当 k = 2 时,应当返回: 2->1->4->3->5
当 k = 3 时,应当返回: 3->2->1->4->5

思路: 使用 递归的思路:

递归思维:k 个一组反转链表

在这里插入图片描述
python实现:

# Definition for singly-linked list.
# class ListNode:
#     def __init__(self, x):
#         self.val = x
#         self.next = Noneclass Solution:def reverseKGroup(self, head: ListNode, k: int) -> ListNode:# 翻转区间[a, b) 的元素, 注意是 左闭右开。  def reverse(a, b):pre = ListNode()cur = anxt = a# while终止条件变成 != bwhile cur != b:    nxt = cur.nextcur.next = prepre = curcur = nxt# 反转后的头节点return preif not head:return Nonea = b = headfor i in range(k):if not b:return headb = b.next# 返回z反转后的头节点newHead = reverse(a, b)# a: 反转之前的头节点, 然后把 反转后的 下一次的头节点拼起来a.next = self.reverseKGroup(b, k)return newHead

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/157250.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

子虔与罗克韦尔自动化合作 进博会签约自动化净零智造联创中心

11月6日进博会现场,漕河泾罗克韦尔自动化净零智造联创中心合作协议签约暨合作伙伴(第一批)授牌仪式举办,子虔科技作为联创中心合作伙伴签约,携手共建智能制造,引领行业可持续发展。 图示:子虔科…

C 标准库 - <time.h>和<float.h>详解

目录 简介 库变量 库宏 库函数 简介 库变量 库宏 库函数 <time.h> 简介 C 标准库中的 <time.h> 头文件提供了处理时间和日期的函数和类型定义。它包含了一些结构体和函数&#xff0c;可以用于获取系统当前的日期、时间&#xff0c;以及进行日期和时间的计算…

【电路笔记】-电源电压

电源电压 文章目录 电源电压1、概述1.1 交流发电机1.2 电池1.3 理想电压源1.4 实际电压源1.5 连接规则 2、相关源2.1 压控电压源 (VCVS)2.2 电流控制电压源 (CCVS) 3、总结 在本文中&#xff0c;我们详细介绍了称为电源电压的重要电子元件的架构、功能和使用。 我们首先提出理想…

MySQL复杂查询与优化:窗口函数、分页查询与查询计划优化

在MySQL数据库中&#xff0c;进行复杂查询并优化查询计划是提高数据库性能的关键。本文将深入探讨窗口函数、分页查询以及查询计划优化的方法。 1. 窗口函数&#xff08;Window Functions&#xff09; 1.1 什么是窗口函数&#xff1f; 窗口函数是一种在查询结果集内执行聚合…

【开题报告】基于SpringBoot的网上摄影工作室的设计与实现

1.选题背景与意义 随着社交媒体的普及和人们对个人形象的重视&#xff0c;摄影行业发展迅速。传统的摄影工作室在数字化时代也需要向线上转型&#xff0c;以满足用户更便捷、快速的需求。因此&#xff0c;基于SpringBoot的网上摄影工作室的设计与实现具有以下背景和意义&#…

前端面试题【72道】

文章目录 1. 说说你对盒子模型的理解2. css选择器有哪些&#xff1f;优先级&#xff1f;哪些属性可以继承&#xff1f;3. 元素水平垂直居中的方法有哪些&#xff1f;如果元素不定宽高呢&#xff1f;4. 怎么理解回流跟重绘&#xff1f;什么场景下会触发&#xff1f;5. 什么是响应…

从零开始学习typescript——数据类型

数据类型 以前我们用js编写代码的时候&#xff0c;都是直接使用let、var、const 来定义数据类型&#xff1b;js会在运行时来确定数据类型&#xff0c;但是在ts中&#xff0c;可以在声明时就可以指定数据类型。如果你学过其他编程语言&#xff0c;比如c、java就能更好的理解了。…

Android 12.0 mt6771新增分区功能实现三

1.前言 在12.0的系统开发中,在对某些特殊模块中关于数据的存储方面等需要新增分区来保存, 所以就需要在系统分区新增分区,接下来就来实现这个功能,看第三部分关于的实现新增分区的过程 2.mt6771新增分区功能实现三的核心类 build/make/tools/releasetools/common.pydevic…

什么是神经网络(Neural Network,NN)

1 定义 神经网络是一种模拟人类大脑工作方式的计算模型&#xff0c;它是深度学习和机器学习领域的基础。神经网络由大量的节点&#xff08;或称为“神经元”&#xff09;组成&#xff0c;这些节点在网络中相互连接&#xff0c;可以处理复杂的数据输入&#xff0c;执行各种任务…

Docker安装Zookeeper

天行健&#xff0c;君子以自强不息&#xff1b;地势坤&#xff0c;君子以厚德载物。 每个人都有惰性&#xff0c;但不断学习是好好生活的根本&#xff0c;共勉&#xff01; 文章均为学习整理笔记&#xff0c;分享记录为主&#xff0c;如有错误请指正&#xff0c;共同学习进步。…

【数据结构】栈和队列的模拟实现

前言&#xff1a;前面我们学习了单链表并且模拟了它的实现&#xff0c;今天我们来进一步学习&#xff0c;来学习栈和队列吧&#xff01;一起加油各位&#xff0c;后面的路只会越来越难走需要我们一步一个脚印&#xff01; &#x1f496; 博主CSDN主页:卫卫卫的个人主页 &#x…

【ArcGIS Pro微课1000例】0034:矢量数据几何校正案例(Spatial Adjustment)

本案例讲解矢量数据几何校正&#xff0c;根据一个矢量数据去校正另外一个矢量数据。 文章目录 一、加载实验数据二、空间校正三、注意事项 一、加载实验数据 在ArcGIS Pro中加载数据效果如下&#xff1a; design&#xff1a;需要校正的数据图层planroadcenter&#xff1a;目标…

ubuntu22.04安装网易云音乐

附件&#xff1a; https://download.csdn.net/download/weixin_44503976/88557248 wget https://d1.music.126.net/dmusic/netease-cloud-music_1.2.1_amd64_ubuntu_20190428.deb wget -O patch.c https://aur.archlinux.org/cgit/aur.git/plain/patch.c?hnetease-cloud-m…

【Docker】从零开始:5.Docker安装与卸载

【Docker】从零开始&#xff1a;4.Docker安装 安装步骤1.确定你是CentOS7及以上版本2.卸载旧版本a.查看是否已安装dockerb.如何安装了卸载docker 3.通过yum安装gcc相关依赖包4.安装需要的软件包5.设置yum stable镜像仓库 &#xff08;源&#xff09;1.备份源2.配置源阿里云仓库…

数据库的基本概念以及MySQL基本操作

一、数据库的基本概念 1、数据库的组成 数据&#xff1a;描述事物的符号记录 包括数字&#xff0c;文字、图形、图像、声音、档案记录等 以“记录”形式按统一格式进行存储 表&#xff1a;将不同的记录组织在一起&#xff0c;用来存储具体数据 数据库&#xff1a; 表的集合…

【开源】基于Vue和SpringBoot的服装店库存管理系统

项目编号&#xff1a; S 052 &#xff0c;文末获取源码。 \color{red}{项目编号&#xff1a;S052&#xff0c;文末获取源码。} 项目编号&#xff1a;S052&#xff0c;文末获取源码。 目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 数据中心模块2.2 角色管理模块2.3 服…

AT89S52单片机

目录 一.AT89S52单片机的硬件组成 1.CPU(微处理器) (1)运算器 (2)控制器 2.数据存储器 (RAM) (1)片内数据存储器 (2)片外数据存储器 3.程序存储器(Flash ROM) 4.定时器/计数器 5.中断系统 6.串行口 7.P0口、P1口、P2口和P3口 8.特殊功能寄存器 (SFR) 常用的特殊功…

>Web 3.0顶级干货教学:浅析区块链与货币关系

Web 3.0顶级干货教学&#x1f525;&#xff1a;浅析区块链与货币关系 尊重原创&#xff0c;编写不易 &#xff0c;帮忙点赞关注一下~转载小伙伴请注明出处&#xff01;谢谢 1.0 数字交易 最早一笔数字化交易 是在www.PizzaHut.com 在 1994 年产生的&#xff0c;但是有趣的事情…

79基于matlab的大米粒中杂质识别

基于matlab的大米粒中杂质识别&#xff0c;数据可更换自己的&#xff0c;程序已调通&#xff0c;可直接运行。 79matlab图像处理杂质识别 (xiaohongshu.com)

JAVA sql 查询2

SELECT * FROM employees order by salayr DESC SELECT employee_id,first_name,salary from employees ORDER BY salary,employee_id desc -- 最大值 最小值 总和 平均值 SELECT max(salary),MIN(salary),sum(salary),AVG(salary) FROM employees -- 总共有多少员工 select…