当前位置: 首页 > news >正文

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.lryc.cn/news/238589.html

相关文章:

  • 【Django-02】 Model模型和模型描述对象Meta
  • 【华为OD题库-030】阿里巴巴找黄金宝箱(V)-java
  • centos7卸载mongodb数据重新安装时无法安装的问题
  • ES6 的 class 类和Typescript 的 class 类的区别
  • Android 12.0 默认授予应用权限
  • Google Earth Engine(GEE)——多源遥感变量筛选(PCA主成分分析),变量筛选/降维处理
  • 爬虫的http和https基础
  • 读像火箭科学家一样思考笔记05_思想实验
  • mac gitee新建工程遇到的一些问题
  • 某60区块链安全之Call函数簇滥用实战一学习记录
  • 最新AIGC创作系统ChatGPT系统源码,支持最新GPT-4-Turbo模型,支持DALL-E3文生图,图片对话理解功能
  • openssl+ SM2 + linux 签名开发实例(C++)
  • U4_1:图论之DFS/BFS/TS/Scc
  • STM32框架之按键扫描新思路
  • 完美解决k8s master节点无法ping node节点中的IP或Service NodePort的IP
  • 弗洛伊德算法(C++)
  • 相对定位、绝对定位、固定定位、绝对定位堆叠顺序
  • px4+vio实现无人机室内定位
  • 享元模式 rust和java的实现
  • XmlElement注解在Java的数组属性上,以产生多个相同的XML元素
  • SQLServer 数字加千分位 用FORMAT函数强转不管多大位数
  • 说说mvc和mvvm的区别和联系
  • linux rsyslog综合实战2
  • AcWing 4. 多重背包问题 I 学习笔记
  • 解决selenium使用chrome下载文件(如pdf)时,反而打开浏览器的预览界面
  • 2024年山东省职业院校技能大赛中职组“网络安全”赛项竞赛试题-C
  • 基于Python实现用于实时监控和分析 MySQL 服务器的性能指标和相关信息工具源码
  • Android 10-13鼠标右键返回功能适配
  • 51单片机/STM32F103/STM32F407学习1_点亮LED灯
  • (Transfer Learning)迁移学习在IMDB上训练情感分析模型