【力扣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要拷贝resreturn for i in range(len(nums)):if used[i] == 0:  # 遍历所有没用过的used[i] = 1path.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] * npath = []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+1path.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))  # 不用传复制因为已经新建字符串了returns = 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[:])returnfor 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 nres = []def backtrack(path, left, right):# 两种情况需要剪枝# 1.左括号多于n了:((((# 2.右括号多于左括号:())if left > n or right > left: returnif len(path) == 2 * n:  # 因为括号都是成对出现的res.append(path)returnbacktrack(path + '(', left + 1, right)  # 生成一个加一个backtrack(path + ')', left, right + 1)backtrack('', 0, 0)return res

后言

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

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

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

相关文章

项目整合管理 -2024年高项第4版(附思维导图)

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言一、项目整合管理概述二、 项目整合管理的目标三、项目整合管理的过程组1.制定项目章程2.制定项目管理计划3. 指导与管理项目工作4.管理项目知识5.监控项目工作…

MyBatis 学习(四)之 SQL 映射文件

目录 1 SQL 映射文件介绍 2 select 元素 3 insert 元素 4 update 和 delete 元素 5 sql 元素 6 parameterType 元素 7 resultType 元素 8 resultMap 元素&#xff08;重要&#xff09; 9 参考文档 1 SQL 映射文件介绍 映射器是 MyBatis 中最复杂并且是最重要的…

逆变器专题(16)-构网型逆变器与跟网型逆变器

相应仿真原件请移步资源下载 现如今&#xff0c;常规的逆变器控制方法主要分为跟网型以及构网型逆变器 跟网型逆变器即常规意义上的并网逆变器&#xff0c;即输出电流直接接入大电网&#xff0c;通常为电流源型逆变器&#xff0c;其输出电流的相位与频率时随着电网电压而随时进…

GitHub Copilot extension activation error: ‘No access to GitHub Copilot found‘

好不容易学生认证通过了&#xff0c;打开vscode用copilot结果一直报这个错误。我的原因是&#xff1a;还未给copilot授权&#xff0c; 通过了学生认证后要进入这里进行授权&#xff1a;

常见外设学习以及无线通信频率

常见外设 UART UART&#xff08;Universal Asynchronous Receiver/Transmitter&#xff0c;通用异步收发器&#xff09;是一种异步、串行、全双工的通信总线。 UART 有3根线&#xff0c;分别是&#xff1a;发送线&#xff08;TX&#xff09;、接收线&#xff08;RX&#xff…

抽象类与抽象方法

文章目录 抽象类抽象类的特点 抽象方法抽象方法的特点 模板设计模式模板设计模式能解决的问题示例 #抽象类与抽象方法 抽象类 用abstract关键字来修饰一个类时&#xff0c;这个类就叫抽象类。 public abstract 类名{... }抽象类的特点 1&#xff09;抽象类不能被实例化。 2&…

新闻网站封锁AI爬虫 AI与新闻媒体博弈继续

随着ChatGPT等新兴AI模型的兴起&#xff0c;它们所依赖的网络爬虫正面临来自全球主流新闻网站的大规模封锁。Richard Fletcher博士团队对十个国家主流新闻网站的统计发现&#xff0c;到2023年底&#xff0c;48%的网站屏蔽了OpenAI的爬虫&#xff0c;24%屏蔽了Google的爬虫。那么…

批量自动加好友神器!微信快速扩友秘籍!

对于一些个人或者企业来说&#xff0c;传统的人工添加好友方式往往会出现效率低下&#xff0c;费时费力的问题。那么&#xff0c;有没有一种快速、便捷、安全的方式来解决这个问题呢&#xff1f;答案当然是肯定的&#xff0c;那就是通过使用微信管理系统来解决这一问题。 在微…

缓存穿透解决方案之布隆过滤器

布隆过滤器可以快速判断数据是否存在&#xff0c;避免从数据库中查询数据是否存在&#xff0c;减轻数据库的压力 布隆过滤器是由一个初值为0的bit数组和N个哈希函数&#xff0c;可以用来快速的判断某个数据是否存在 当我们想要标记某个数据是否存在时&#xff0c;布隆过滤器会…

收银系统源码-智慧新零售,ERP进销存功能详解

智慧新零售是一套线下线上一体化的收银系统&#xff0c;不仅给门店线下提供了多样化的收款方式&#xff0c;还提供了和线下深度打通的线上小程序商城。有线下又有线上自然需要一套完整的进销存模块能高效的管理商品。 智慧新零售进销存功能涵盖了商品的采购、销售、调拨、盘点…

(学习日记)2024.03.01:UCOSIII第三节

写在前面&#xff1a; 由于时间的不足与学习的碎片化&#xff0c;写博客变得有些奢侈。 但是对于记录学习&#xff08;忘了以后能快速复习&#xff09;的渴望一天天变得强烈。 既然如此 不如以天为单位&#xff0c;以时间为顺序&#xff0c;仅仅将博客当做一个知识学习的目录&a…

请查收:2024年腾讯云服务器优惠价格表_租用配置报价

一张表看懂腾讯云服务器租用优惠价格表&#xff0c;一目了然&#xff0c;腾讯云服务器分为轻量应用服务器和云服务器CVM&#xff0c;CPU内存配置从2核2G、2核4G、4核8G、8核16G、4核16G、8核32G、16核32G、16核64等配置可选&#xff0c;公网带宽1M、3M、5M、12M、18M、22M、28M…