【力扣hot100】刷题笔记Day17

前言

  • 今天竟然不用开组会!天大的好消息,安心刷题了

46. 全排列 - 力扣(LeetCode)

  • 回溯(排列)

    • class Solution:
          def permute(self, nums: List[int]) -> List[List[int]]:
              # 回溯
              def backtrack():
                  if len(path) == len(nums):
                      res.append(path[:])  # 如果path长度达到要求,收集结果,注意python要拷贝res
                      return 
                  for i in range(len(nums)):
                      if used[i] == 0:  # 遍历所有没用过的
                          used[i] = 1
                          path.append(nums[i])
                          backtrack()
                          path.pop()  # 撤销
                          used[i] = 0  # 撤销
              # 可变对象在函数中可以直接改不需要作为参数,也不需要写self,只有赋值需要
              # 比如:递归里self.res= max(self.res,l+r)需要用self或递归里nonlocal res声明
              n = len(nums)
              used = [0] * n
              path = []
              res = []
              backtrack()
              return res
  • 回溯(交换填充)

    • class Solution:
          def permute(self, nums: List[int]) -> List[List[int]]:
              def backtrack(first = 0):
                  # 所有数都填完了
                  if first == n:  
                      res.append(nums[:])
                  for i in range(first, n):
                      # 动态维护数组
                      nums[first], nums[i] = nums[i], nums[first]
                      # 继续递归填下一个数
                      backtrack(first + 1)
                      # 撤销操作
                      nums[first], nums[i] = nums[i], nums[first]
              
              n = len(nums)
              res = []
              backtrack()
              return res

 78. 子集 - 力扣(LeetCode)

  • 回溯(组合)

    • class Solution:
          def subsets(self, nums: List[int]) -> List[List[int]]:
              def backtrack(start=0):
                  res.append(path[:])  # 每到一个节点就传一次答案
                  # if start == n: return  # 下面的for循环隐含这个终止条件
                  for i in range(start, n):
                      path.append(nums[i])
                      backtrack(i+1)  # 注意这里传入的是i+1
                      path.pop()
              n = len(nums)
              res = []
              path = []
              backtrack(0)
              return res
      

17. 电话号码的字母组合 - 力扣(LeetCode) 

  • 回溯(不同集合的组合)

    • class Solution:
          def letterCombinations(self, digits: str) -> List[str]:
              def backtrack(index = 0):
                  if index == len(digits):
                      res.append("".join(path))  # 不用传复制因为已经新建字符串了
                      return
                  s = mp[int(digits[index])]  # 取出对应数字的字符串
                  for c in s:
                      path.append(c)
                      backtrack(index+1)
                      path.pop()
              if len(digits) == 0:
                  return []
              mp = ['', '', 'abc', 'def', 'ghi', 'jkl', 'mno', 'pqrs', 'tuv', 'wxyz']  # 下标号码映射字符串
              path = []
              res = []
              backtrack()
              return res

39. 组合总和 - 力扣(LeetCode) 

  • 回溯(排序剪枝)

    • class Solution:
          def combinationSum(self, candidates: List[int], target: int) -> List[List[int]]:
              path = []
              res = []
              n = len(candidates)
              def backtrack(start, target):
                  if target < 0: return    # 剪枝返回上一层,后面更大的数就没必要减了
                  if target == 0:
                      res.append(path[:])
                      return
                  for i in range(start, n):
                      path.append(candidates[i])
                      backtrack(i, target-candidates[i])  # 传i而不是i+1说明当前数可以重复选
                      path.pop()
              candidates.sort()  # 剪枝,排序后大的数在后面选择优先级低
              backtrack(0, target)
              return res

 22. 括号生成 - 力扣(LeetCode)

  • 回溯(组合)

    • 这个题解结合官解就能看懂了,主要在于括号合法性判断上
    • class Solution:
          def generateParenthesis(self, n: int) -> List[str]:
              if n <= 0: return n
              res = []
      
              def backtrack(path, left, right):
                  # 两种情况需要剪枝
                  # 1.左括号多于n了:((((
                  # 2.右括号多于左括号:())
                  if left > n or right > left: return
                  if len(path) == 2 * n:  # 因为括号都是成对出现的
                      res.append(path)
                      return
                  backtrack(path + '(', left + 1, right)  # 生成一个加一个
                  backtrack(path + ')', left, right + 1)
              backtrack('', 0, 0)
      
              return res

后言

  • 今天就到这吧,还有其他事情,感觉回溯还不熟练,脑子里模拟不太出来,待会去看看代码随想录再熟悉熟悉 

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【InternLM 实战营笔记】浦语·灵笔的图文理解及创作部署、 Lagent 工具调用 Demo

浦语灵笔的图文理解及创作部署 浦语灵笔是基于书生浦语大语言模型研发的视觉-语言大模型&#xff0c;提供出色的图文理解和创作能力&#xff0c;结合了视觉和语言的先进技术&#xff0c;能够实现图像到文本、文本到图像的双向转换。使用浦语灵笔大模型可以轻松的创作一篇图文推…

【办公类-18-03】(Python)中班米罗可儿证书批量生成打印(班级、姓名)

作品展示——米罗可儿证书打印幼儿姓名 背景需求 2024年3月1日&#xff0c;中4班孩子一起整理美术操作材料《米罗可儿》的操作本——将每一页纸撕下来&#xff0c;分类摆放、确保纸张上下位置正确。每位孩子们都非常厉害&#xff0c;不仅完成了自己的一本&#xff0c;还将没有…

nginx如何配置命令启动

我安装好nginx后&#xff0c;发现不能使用systemctl start nginx或者systemctl stop nginx来控制启停 解决方法如下 首先要建一个nginx.pid的文件 一般是建在 /var/run/这个路径下面 sudo touch /var/run/nginx.pid 添加权限 sudo chmod 644 /var/run/nginx.pid可以进入到…

C#,双向链表(Doubly Linked List)归并排序(Merge Sort)算法与源代码

1 双向链表 双向链表也叫双链表&#xff0c;是链表的一种&#xff0c;它的每个数据结点中都有两个指针&#xff0c;分别指向直接后继和直接前驱。所以&#xff0c;从双向链表中的任意一个结点开始&#xff0c;都可以很方便地访问它的前驱结点和后继结点。一般我们都构造双向循…

数学学习与研究杂志社《数学学习与研究》杂志社编辑部2023年第29期目录

考试研究 提高高三数学二轮复习质量的思考与实践 佘淮青; 2-4 提升高三数学复习质量的策略探究 王飞; 5-7 核心素养背景下的高中数学命题策略研究 陈明发; 8-10 提升中考数学复习课的有效性研讨 韩兴宏; 11-13 中学教学方法《数学学习与研究》投稿&#xff1a;…

【前端素材】推荐优质后台管理系统DAdmin平台模板(附源码)

一、需求分析 1、系统定义 后台管理系统是一种用于管理网站、应用程序或系统的管理界面&#xff0c;通常由管理员和工作人员使用。它提供了访问和控制网站或应用程序后台功能的工具和界面&#xff0c;使其能够管理用户、内容、数据和其他各种功能。 2、功能需求 后台管理系…

微信小程序手势冲突?不存在的!

原生的应用经常会有页面嵌套列表&#xff0c;滚动列表能够改变列表大小&#xff0c;然后还能支持列表内下拉刷新等功能。看了很多的小程序好像都没有这个功能&#xff0c;难道这个算是原生独享的吗&#xff0c;难道是由于手势冲突无法实现吗&#xff0c;冷静的思考了一下&#…

软考-计算题

1.二维矩阵转换成一维矩阵 2.算术表达式&#xff1a; 3.计算完成项目的最少时间&#xff1a;之前和的max&#xff08;必须之前的所有环节都完成&#xff09; 松弛时间&#xff1a;最晚开始时间-最早开始时间 最早&#xff1a;之前环节都完成的和的max 最晚&#xff1a;总时间…

LTX Studio开放测试,用户可以通过输入文本来生成超过25秒的微电影视频;人工智能的崛起和局限

&#x1f989; AI新闻 &#x1f680; LTX Studio开放测试&#xff0c;用户可以通过输入文本来生成超过25秒的微电影视频 摘要&#xff1a;LTX Studio是由著名AI平台Lightricks推出的生成式AI电影制作平台。用户可以通过输入文本来生成超过25秒的微电影视频&#xff0c;并且可…

K8s安全一

Kubernetes是一个开源的&#xff0c;用于编排云平台中多个主机上的容器化的应用&#xff0c;目标是让部署容器化的应用能简单并且高效的使用, 提供了应用部署&#xff0c;规划&#xff0c;更新&#xff0c;维护的一种机制。其核心的特点就是能够自主的管理容器来保证云平台中的…

雷达新研社丨宏电雷达水位计化身“智慧管家”,守护滁州城市生命线

城市生命线是维系城市正常运行、满足群众生产生活需要的重要基础设施。为大力推进城市生命线安全工程建设&#xff0c;加快韧性城市建设&#xff0c;滁州市实施了城市生命线安全工程建设项目。 项目包含对全市1650.5公里排水安全监测感知网的建设&#xff0c;宏电股份作为智慧…

第四十七回 一丈青单捉王矮虎 宋公明二打祝家庄-强大而灵活的python装饰器

四面全是埋伏&#xff0c;宋江和众人一直绕圈跑不出去。正在慌乱之时&#xff0c;石秀及时赶到&#xff0c;教大家碰到白杨树就转弯走。走了一段时间&#xff0c;发现围的人越来越多&#xff0c;原来祝家庄以灯笼指挥号令。花荣一箭射下来红灯龙&#xff0c;伏兵自己就乱起来了…

仿牛客网项目---显示评论和添加评论功能的实现

这篇文章&#xff0c;我来介绍一下我的项目中的另外一个功能&#xff1a;显示评论和添加评论。 其实这两个功能都不怎么重要&#xff0c;我感觉最重要的应该是用户注册登录功能&#xff0c;这个也了解一下&#xff0c;知道这么一回事儿就好。 首先设计DAO层。 Mapper public …

LNMP架构介绍及配置--部署Discuz社区论坛与wordpress博客

一、LNMP架构定义 1、LNMP定义 LNMP&#xff08;Linux Nginx Mysql Php&#xff09;是指一组通常一起使用来运行动态网站或者服务器的自由软件名称首字母缩写&#xff1b;Linux系统下NginxMySQLPHP这种网站服务器架构。 Linux是一类Unix计算机操作系统的统称&#xff0c;是目…

Qt程序设计-指南针自定义控件实例

本文讲解Qt指南针自定义控件实例。 效果演示 创建指南针类 #ifndef COMPASS_H #define COMPASS_H#include <QWidget> #include <QWidget> #include <QTimer> #include <QPainter> #include <QPen> #include <QDebug> #include <QtMat…

【激光SLAM】基于已知位姿的构图算法 (Grid-based)

文章目录 地图分类概念 覆盖栅格建图算法栅格地图的特征数学描述假设 算法流程激光雷达的逆观测模型 计数(Count Model)建图算法概念数学描述观测模型地图估计 地图分类 概念 地图即为环境的空间模型。环境地图是机器人进行定位和规划的前提。定位可以用特征地图&#xff08;…

java-ssm-jsp房屋中介服务平台的设计与实现

java-ssm-jsp房屋中介服务平台的设计与实现 获取源码——》公主号&#xff1a;计算机专业毕设大全

28.HarmonyOS App(JAVA)多页签的实现(Tab)

HarmonyOS App(JAVA)多页签的实现&#xff08;Tab&#xff09; 页面可左右滑动&#xff0c;点击界面1,2,3切换到对应界面 PageSlider的创建和使用 在layout目录下的xml文件中创建PageSlider。 <PageSlider ohos:id"$id:page_slider" ohos:height"300vp&…

Java编程实战:小区管理系统的设计与实现

✍✍计算机编程指导师 ⭐⭐个人介绍&#xff1a;自己非常喜欢研究技术问题&#xff01;专业做Java、Python、微信小程序、安卓、大数据、爬虫、Golang、大屏等实战项目。 ⛽⛽实战项目&#xff1a;有源码或者技术上的问题欢迎在评论区一起讨论交流&#xff01; ⚡⚡ Java实战 |…

MySQL之索引详解

华子目录 索引概述优缺点 索引的原理索引的设计原则索引结构B-tree&#xff08;多路平衡查找树&#xff09;BtreeHash 为什么InnoDB存储引擎选择Btree&#xff1f;索引分类聚集索引选取规则 单列索引和多列索引前缀索引创建索引1.创建表时创建索引2.在已经存在的表上创建索引3.…