Leetcode 刷题笔记1 回溯算法part01

Day22 回溯算法part01 第一种简洁的方法认为递归函数k,n,starindex都是动态变化的,我们添加了一个元素之和,下一次递归应该就是寻找k-1个数,然后它们的和为n-i,starindex + 1;第三种方法和第一种方法其实都是一样的,只是如果我们把n -= i单独写出来,相当于给n重新赋值,那我们就需要显示的写出回溯操作,把n加回去,不加回去的话,该层的递归会影响其他层的结果。剪枝版本1是认为递归函数是返回范围 [starindex, n] 中所有可能的 k 个数的组合,当k == 0的时候退出,我们认为k是一个变量。 阅读详情

leetcode 77 组合

回溯算法的入门,回溯算法更像是一种枚举的策略,本题的组合优化过程可以理解。通过pycharm的调试,对回溯有了初步认识

class Solution:
    def combine(self, n: int, k: int) -> List[List[int]]:
        result = []
        self.backtracking(n, k, 1, [], result)
        return result
    def backtracking(self, n, k , startIndex, path, result):
        if len(path) == k:
            result.append(path[:])
            return
        # 优化后for i in range(startIndex,  n - (k - len(path)) + 2)
        for i in range(startIndex, n + 1):
            path.append(i)
            self.backtracking(n, k , i + 1, path, result)
            path.pop()

leetcode 216 组合总和|||

这题是上题的改版属于基础,值得注意的是回溯算法的剪枝操作

class Solution:
    def combinationSum3(self, k: int, n: int) -> List[List[int]]:
        result = []
        self.backtracking(n, k, 0,)
        return result
    def backtracking(self, targetSum, k, currentSum, startIndex, path, result):
        if currentSum > targetSum:
            return
        if len(path) == k:
            if currentSum == targetSum:
                result.append(path[:])
            return
        for i in range(startIndex, 9 - (k - len(path)) + 2):
            currentSum += i
            path.append(i)
            self.backtracking(targetSum, k, currentSum, i + 1, path, result):
            currentSum -= i
            path.pop()

leetcode 17 电话号码的字母组合

class Solution:
    def letterCombinations(self, digits: str) -> List[str]:
        self.letterMap = [
            "",
            "",
            "abc",
            "def",
            "ghi",
            "jkl",
            "mno",
            "pqrs",
            "tuv",
            "wxyz"
        ]
        self.result = []
        self.s = ""
        if len(digits) == 0:
            return self.result
        self.backtracking(digits, 0)
        return self.result
    def backtracking(self, digits, index):
        if index == len(digits):
            self.result.append(self.s)
            return 
        digit = int(digits[index])
        letters = self.letterMap[digit]
        for i in range(len(letters)):
            self.s += letters[i]
            self.backtracking(digits, index + 1)
            self.s = self.s[:-1]

鼎捷T100——二次开发:维护作业添加非实体字段 非实体字段添加 阅读详情

相关推荐

IBM Storwize V3700存储维护实战:硬盘更换、电源模块热插拔与带外管理IP配置

在企业IT基础设施中,存储阵列是数据持久化的核心组件,其稳定运行直接关系到业务连续性。存储阵列通常采用RAID技术实现数据冗余,并通过热插拔、冗余电源等设计保障高可用性。带外管理则提供了独立于业务网络的硬件级监控与管理通道,是运维的关键手段。本次实战以一台IBM Storwize V3700存储阵列为例,详细记录了在业务低峰期,依据严谨的操作流程,对出现SMART预警的硬盘进行在线更换,并对有异响的冗余电源模块实施热插拔更换。针对管理界面强制要求设置VIP才能配置带外管理地址的限制,文章提供了通过SSH命令

weixin_29172963的博客 303

Day22 回溯算法_part01

然后return返回。如果不等于k则说明还没有找齐一个大小为k的组合,用for循环从startIndex标记的位置开始遍历集合的剩余部分,进入循环首先将当前i的值加入path中,再对集合从i+1开始的部分递归调用回溯函数;进入递归函数首先判断当前index是否已经指向digits最后一个元素,即index==digits.size(),如果是,则说明已将当前数字串对应字母找齐,直接将s压入结果数组并返回。这里的k还是组合的大小,n不再是搜索范围,而是组合的总和值,搜索范围变为固定的[1,9]。

2301_80243466的博客 1697

Frigate进阶玩法:如何用MQTT和Python脚本扩展你的自定义目标检测算法

本文详细介绍了如何通过MQTT和Python脚本扩展Frigate的自定义目标检测算法,无需修改源码即可实现特殊场景(如工业设备异常、农业病虫害识别)的高效检测。文章涵盖Frigate配置、外部检测服务构建、高级集成技巧及性能优化实践,帮助开发者灵活扩展智能监控能力。

weixin_42662293的博客 350

Leetcode Hot 100 ——回溯part01

Leetcode Hot 100 ——回溯part01

qq_52421969的博客 1063

别再手动盘点了!教你给微信小程序仓库系统加个‘扫码枪’:完整扫码入库与查询功能实现

本文详细介绍了如何为微信小程序仓库系统添加扫码入库与查询功能,实现零硬件成本的智能仓储管理。通过优化摄像头参数、增强动态识别算法和深度整合业务逻辑,提升扫码精度和效率,同时提供混合查询方案应对复杂场景。这套方案显著提升入库效率,降低错误率,适用于各类仓储管理需求。

weixin_30844577的博客 298

魔兽RPG老地图逆向工程:解密三国列传3.0武将招募限制(附JASS实战)

本文详细解析了《三国列传3.0》魔兽RPG地图的武将招募限制机制,通过逆向工程和JASS脚本修改技术,突破SLK加密防线并解密游戏逻辑。文章提供了从工具准备到代码修改的完整实战指南,帮助玩家解除武将数量限制,重温经典游戏的乐趣。

i1j2k的博客 363

算法训练营DAY22 第七章 回溯算法part01

for循环,引入i=0,i<letters.size(),i++;循环中s.push_back(lettes[i]),然后进入下一层递归,注意回溯s.pop_back();注意回溯,sum-=i;因为输入的是字符串,需要int num转换输入的字符串成整形,只需要num=digits[index[-'0';示例 2: 输入: k = 3, n = 9 输出: [[1,2,6], [1,3,5], [2,3,4]]回溯法一般是在集合中递归搜索,集合的大小构成了树的宽度,递归的深度构成的树的深度。

2401_89133587的博客 750

【MATLAB】嵌入式PID控制参数整定与优化

本文提出了一种基于MATLAB仿真的嵌入式PID参数优化方法,解决了传统人工试凑法效率低、适应性差的问题。通过建立一阶滞后被控对象模型,对比分析了不同PID参数组合的性能表现,筛选出最优参数。仿真结果表明,优化后的PID参数能有效降低超调量(从传统方法的显著超调降至接近0%),缩短调节时间,提高稳态精度。最终将优化算法部署到STM32平台,实现了"仿真整定-参数优化-嵌入式落地"的完整开发流程。该方法显著提升了嵌入式系统的响应速度和控制精度,为工业控制应用提供了标准化解决方案。

unber的博客 45

代码随想录算法训练营十九天|回溯part01

回溯:77组合、216组合总和III、17电话号码的字母组合

欢迎光临花开富贵的博客 1051

Open3D 使用CPD算法对点云配准【2025最新版】

Coherent Point Drift相干点漂移算法实现点云配准(python代码)博客长期更新,本文最近更新时间为:2025年2月2日。

点云侠的博客 8万+

Python 爬虫实战:爬取 B 站 UP 主投稿数据,分析更新频率与粉丝互动

摘要:本文基于Python技术实现B站UP主投稿数据的自动化爬取与分析。通过解析B站WBI签名机制和API接口,获取UP主视频的标题、播放量、点赞数等核心数据。采用时间序列分析统计更新频率,结合相关性分析挖掘内容特征与粉丝互动的关联。结果显示编程类视频播放量最高,10-20分钟时长的视频表现最佳,投币数与播放量相关性达0.92。文章详细介绍了接口分析、反爬应对等关键技术,为内容创作者优化策略提供数据支持,同时强调遵守平台规范的爬取原则。

2503_91057718的博客 1537

代码随想录算法训练营第19天 | 第七章 回溯算法part01

代码随想录算法训练营第19天 | 第七章 回溯算法part01

zxjiaya的博客 1113

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

代码随想录算法训练营第22天-leetcode-回溯算法part01:

column的赋值过程:*column是正常数组,先为*column开辟空间,*column【第几个,<returnsize】=ans【第几个】有多少个二层元素。示例: 输入: n = 4, k = 2 输出: [ [2,4], [3,4], [2,3], [1,2], [1,3], [1,4],放入path的过程需要用循环一个个放入,直接=path的话,后面会随path修改而修改。示例 2: 输入: k = 3, n = 9 输出: [[1,2,6], [1,3,5], [2,3,4]

weixin_65180740的博客 1319

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

算法训练营 day19 | 回溯算法part01

总结:需要做剪枝,不然会TLE,整体和上一题的代码十分类似。只需要在加和大于目标值时直接返回就行。总结:见到回溯类的题目要先想到模版,然后先写出来基础版本之后再去考虑是否可以剪枝的问题。继续坚持刷题吧,准备刷完题去实习。有好多二叉树的题跳过了,先不刷了。可以进行剪枝,在遍历当前层的选择时可以缩小范围。

m0_68293482的博客 496

leetcode刷题day22|回溯算法Part01( 77. 组合 、216. 组合总和 III、17.电话号码的字母组合)

回溯是递归的副产品,只要有递归就会有回溯,回溯函数也就是递归函数。回溯是暴力穷举解法,效率并不高。但一些问题只能使用回溯来解决。

m0_51007517的博客 1306

回溯算法 | part01

示例: 输入: n = 4, k = 2 输出: [ [2,4], [3,4], [2,3], [1,2], [1,3], [1,4], ]回溯算法是一个纯暴力搜索的算法,适用于组合,切割,子集,排列,棋盘问题,理解回溯算法,可以将其转化为树的结构进行理解,n叉树。找出所有相加之和为 n 的 k 个数的组合。示例 2: 输入: k = 3, n = 9 输出: [[1,2,6], [1,3,5], [2,3,4]]说明:尽管上面的答案是按字典序排列的,但是你可以任意选择答案输出的顺序。

2403_88856345的博客 572

【代码随想录Day22】回溯算法Part01

【代码】【代码随想录Day22】回溯算法Part01。

Shayne 的博客 1004

回溯part01

差k-path.size()个元素,至少要从n-(k-path.size())+1的处开始遍历。此时i就不用将全部剩余的数字遍历完,只需要判断i是否符合要满足条件的最小下标即可。使用index约束组合的大小,同时index也能用来确定不同的数字对应的字符串。但是这里每新选择一个字母,下一层遍历都要从下一个字符串的开头开始遍历。由于当要遍历的剩余元素个数不满足k时,遍历就没有意义。由于数字只有2-9,则数组的0和1下标对应的内容为空。这样下一列就是选择该元素后,要遍历的元素。每一列代表选择不同要遍历的元素。

2501_93733665的博客 316

回溯算法part01 算法

今日内容:● 理论基础● 77. 组合。

Belle_Daisy的博客 676

DAY22|回溯算法Part01|LeetCode: 77. 组合、216.组合总和III 、17.电话号码的字母组合

参数:题目中给的string digits,然后还要有一个参数就是int型的index,这里的Index不是前面的startIndex,这里的两个字符串不属于同一个数组,用来记录遍历到第几个字符。参数:定义目标和targetSum(int类型)(即题目中的n),定义k,定义已经收集的元素的总和sum,也就是path里元素的总和,定义下一层for循环搜索的起始位置startIndex。在上面我们提到了,回溯法一般是在集合中递归搜索,集合的大小构成了树的宽度,递归的深度构成的树的深度。

ning1437589742的博客 1219

day22 回溯算法part01

本文介绍了回溯算法的理论基础和实际应用。回溯本质上是一种暴力求解方法,适用于需要动态处理循环层数的问题。文章给出了回溯算法的通用模板,并展示了三个典型案例:组合问题(LeetCode 77题)、组合总和III(LeetCode 216题)和电话号码字母组合(LeetCode 17题)。每个案例都包含详细的问题描述、解题思路和C++代码实现,其中组合问题还特别说明了剪枝优化技巧。这些示例展示了回溯算法在处理不同场景下的应用方式,特别是当问题需要遍历不定数量的选择时,回溯算法能有效解决暴力解法难以处理的情况。

2404_89070380的博客 372

夸父追日:第七章 回溯算法part01

夸父追日第22天

qq_56221558的博客 654

第七章 回溯算法part01 理论基础 77. 组合

回溯法也可以叫做回溯搜索法,它是一种搜索的方式。回溯是递归的副产品,只要有递归就会有回溯。所以以下讲解中,回溯函数也就是递归函数,指的都是一个函数。

qq_45498567的博客 206

代码随想录第二十一天|回溯算法part01--回溯算法理论基础、77.组合、216.组合总和Ⅲ、17.电话号码的字母组合

回溯算法是一种本质是穷举,解决暴力搜索问题的算法。

csy031117的博客 827

代码随想录 day24 第七章 回溯算法part01

回溯函数模板返回值以及参数。

weixin_60315213的博客 1045

第七章 回溯算法part01

回溯算法一般是如下步骤:一般可以分为组合问题,排列问题,子集问题,切割问题,棋盘问题。这些问题后续会一一提到。

zuesandhera的博客 121
上一篇: Leetcode 刷题笔记1 二叉树part08
下一篇: Leetcode 刷题笔记1 回溯算法part02
平乐君
博客等级 码龄5年 65粉丝 52原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值