力扣题目:#332.重新安排行程

刷题时长:参考题解

解题方法:回溯法 + 哈希表

复杂度分析

  • 时间
  • 空间

问题总结

  • 无思路

本题收获

  • 难点

    • 避免死循环:去过的to机场及时删除
    • 记录映射关系:哈希表,用dict实现(list也可以)
    • 遍历from机场所对应的所有to机场:dict的key为from机场,dict[from]的val为其对应的to机场的列表
  • 回溯逻辑
    • 返回值:bool,当找到符合要求的路径(唯一通向叶节点的路径)后,即可立即返回跳出递归
    • 参数:题目给的tickets,可以加上tickets numbers, path, result, used
    • 终止条件:当结果集中的机场个数达到了已给航班数量+1,即找到了一个把所有航班串在一起了的行程
  • 待解决:dict的题解中,若已经对to机场做了排序后一定能在第一次深度搜索后找到答案路径,是否还有必要用回溯?

力扣题目:#51. N皇后

刷题时长:参考答案

解题方法:回溯 + 判断函数

复杂度分析

  • 时间O(n!):看树形图的话直觉上是O(n^n),但皇后之间不能见面所以在搜索的过程中是有剪枝的,最差也就是O(n!),n!表示n * (n-1) * .... * 1
  • 空间O(n)

问题总结

  • 无思路

本题收获

  • 难点:处理二维数组问题。棋盘的宽度就是for循环的长度,递归的深度就是棋盘的高度,这样就可以套进回溯法的模板里了
  • 回溯逻辑:
    • 返回值:无
    • 参数:chessboard, n棋盘总大小, row现在第几行, path, result
    • 终止条件:当遍历到棋盘最后一行的叶子,即遍历到的row==棋盘大小n时,收集结果并返回
    • 单层搜索:递归深度就是row控制棋盘的行,每一层里for循环的col控制棋盘的列,一行一列,确定了放置皇后的位置。
    • isValid函数:皇后位置是否合法,则需搜索此列,左上方,右上方所有位置是否已经有皇后。

力扣题目:#37. 解数独

刷题时长:参考答案

解题方法:回溯 + 二维递归

复杂度分析

  • 时间O(9^m) , m是'.'的数目
  • 空间O(n^2),递归的深度是n^2

问题总结

  • 无思路

本题收获

  • 难点:二维递归思路。两个for循环嵌套遍历整个棋盘,再一个for循环递归枚举1到9的数值
  • 回溯思路
    • 递归返回值:bool,找到一个符合的条件(就在树的叶子节点上)立刻就返回,相当于找从根节点到叶子节点一条唯一路径,所以需要使用bool返回值
    • 参数:board
    • 终止条件:本题递归不用终止条件,解数独是要遍历整个树形结构寻找可能的叶子节点就立刻返回。递归的下一层的棋盘一定比上一层的棋盘多一个数,等数填满了棋盘自然就终止(填满当然好了,说明找到结果了),所以不需要终止条件
    • 单层递归:二维递归,一个for循环遍历棋盘的行,一个for循环遍历棋盘的列,一行一列确定下来之后,递归遍历这个位置放9个数字的可能性。如果一行一列确定下来了,这里尝试了9个数都不行,说明这个棋盘找不到解决数独问题的解,直接return false返回跳出递归,所以没有终止条件也不会永远填不满棋盘而无限递归下去。
    • isValid函数:参数包含board, row, col, val,逻辑验证 1)同行是否重复;2)同列是否重复;3)9宫格里是否重复(startrow = row // 3 *3)

力扣算法刷题Day30|回溯:重新安排行程 N皇后 解数独相关推荐

  1. Leetcode-How-What 力扣Leetcode刷题指南

    Leetcode-How-What 力扣Leetcode刷题指南 About the way how to use Leetcode wisely for preparing the intervie ...

  2. 力扣数据结构刷题Day1-4

    力扣数据结构刷题Day1-4 文章目录 力扣数据结构刷题Day1-4 前言 一.小试牛刀 存在重复元素(L217) 最大子数组和(L53) 动态规划法 贪心法 分治法 两数之和(L1) 合并两个有序数 ...

  3. 力扣(LeetCode)刷题,简单+中等题(第34期)

    目录 第1题:整数转罗马数字 第2题:电话号码的字母组合 第3题:二叉树的所有路径 第4题:砖墙 第5题:下一个排列 第6题:括号生成 第7题:删除并获得点数 第8题:全排列 第9题:颜色分类 第10 ...

  4. leetcode(力扣)刷题笔记(c++、python)【上】

    文章预览: 数组 1.二分查找 704. 二分查找 相关题目: 35.搜索插入位置 34. 在排序数组中查找元素的第一个和最后一个位置 69.x 的平方根 367.有效的完全平方数 2.双指针 27. ...

  5. 力扣(LeetCode)刷题,简单题(第22期)

    目录 第1题:两数之和IV-输入BST 第2题:柠檬水找零 第3题:左叶子之和 第4题:第K个缺失的正整数 第5题:反转字符串2 第6题:最小移动次数使数组元素相等 第7题:分发饼干 第8题:二叉树的 ...

  6. 力扣(LeetCode)刷题,简单题(第2期)

    目录 第1题:搜索插入位置 第2题:外观数组 第3题:最大子序和 第4题:最后一个单词的长度 第5题:加一 第6题:二进制求和 第7题:求平方根 第8题:爬楼梯 第9题:删除排序链表中的重复元素 第1 ...

  7. 力扣(LeetCode)刷题,简单+中等题(第35期)

    力扣(LeetCode)定期刷题,每期10道题,业务繁重的同志可以看看我分享的思路,不是最高效解决方案,只求互相提升. 第1题:解码异或后的排列 试题要求如下: 回答(C语言): /*** Note: ...

  8. 力扣(LeetCode)刷题,简单+中等题(第33期)

    目录 第1题:Z 字形变换 第2题:删除字符串中的所有相邻重复项 第3题:基本计算器 II 第4题:螺旋矩阵 第5题:螺旋矩阵 II 第6题:盛最多水的容器 第7题:删除有序数组中的重复项 II 第8 ...

  9. 力扣(LeetCode)刷题,简单+中等题(第32期)

    目录 第1题:数组的度 第2题:托普利茨矩阵 第3题:爱生气的书店老板 第4题:翻转图像 第5题:有效的数独 第6题:无重复字符的最长子串 第7题:区域和检索 - 数组不可变 第8题:二维区域和检索 ...

最新文章

  1. EPSON机器人的以太网通讯简单总结
  2. 何将ext中的FormPanel中,所有组件都居中放置?
  3. 第 39 章 ThinkPHP--视图
  4. CVPR 2019 Oral 目标跟踪最强算法SiamRPN++开源实现
  5. 解决qt工程文件.pro配置、LIBS添加、ld.so.conf文件添加、库文件权限设置等一系列问题
  6. ML/DL-复习笔记【四】- DeepLab系列模型总结
  7. 面试系列(三):Java反射机制
  8. C++获取Unix时间戳(分别以秒和毫秒为单位)的几种方法
  9. 雪莹软件将word转图片产生空白区域的问题解决方法
  10. 数据科学数据分析_使用数据科学进行营销分析
  11. Python爬虫入门【6】:蜂鸟网图片爬取之一
  12. TMS320f28335实现步进电机的驱动程序及原理分析
  13. 邹小强老师的个人目标管理分享课
  14. 华为鸿蒙dba,人生中最重要的决策|读在职博士DBA
  15. 鼠标移到到图片,图片向上滑动预览效果
  16. mysql转sqlserver_mysql迁移sqlserver
  17. 泛微OA集成ERP,助力制造业实现供应商、销售全面数字化管理
  18. 金山词霸字典转换工具
  19. ADS(Arm Developer Suite)安装的坑!
  20. 微信小程序获取用户位置坐标,调用腾讯地图api,转换成地区

热门文章

  1. 谈谈为什么澳洲留学逐渐火爆
  2. PowerMILL中大型汽车模具3+2编程视频教程
  3. vux-ui html版本,Vue中的Vux配置指南
  4. emmm小游戏 Construct
  5. 万物互联的时代, 善用搜索引擎的人才能视野开阔走的更远!访问youtube,google获取最新知识
  6. 基于python的硬币面值识别_列出给定数量的python需要什么硬币
  7. Java 发送邮件的学习笔记
  8. 全球及中国降血脂药行业销售前景模式及动态盈利分析报告2021-2027年
  9. TTS技术在语音识别中的应用:提升语音交互的准确性
  10. 2022.4.27 Burpsuite安装之Java环境配置