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

算法第21天 | 第77题. 组合、216. 组合总和 III、17. 电话号码的字母组合

回溯基础概念

什么是回溯?

如何实现回溯?

第77题. 组合

题目

在这里插入图片描述

思路与解法

carl的讲解: 回溯搜索法

class Solution:def combine(self, n: int, k: int) -> List[List[int]]:self.path = []self.res = []self.backtracking(n, k, 1)return self.resdef backtracking(self, n, k, startIdx):if len(self.path) == k:self.res.append(self.path[:]) # 遍历path里面的值再存入res中,不然存入的是path的引用,这样存入res中的值就会跟着path变了print(self.path)returnif startIdx > n:returni = startIdxwhile i <= n:self.path.append(i)self.backtracking(n, k, i + 1)self.path.pop()i += 1

216. 组合总和 III

题目

在这里插入图片描述

思路与解法

第一想法: 很类似于上一道题,只是终止条件不一样

class Solution:def combinationSum3(self, k: int, n: int) -> List[List[int]]:self.path = []self.sum = 0self.res = []self.backtracking(k, n, 1)return self.resdef backtracking(self, k, n, startIdx):if self.sum == n and len(self.path) == k:self.res.append(self.path[:])returnif len(self.path) > k or self.sum > n or startIdx > 9:returni = startIdxwhile i < 10:self.path.append(i)self.sum += iself.backtracking(k, n, i+1)self.path.pop()self.sum -= ii += 1

17. 电话号码的字母组合

题目

在这里插入图片描述

思路与解法

第一想法: 先用字典存入数字和字母的对应关系,然后使用回溯法遍历每个字母段。递归的退出条件是当前取字母的地方是最后一个字母段。

class Solution:def letterCombinations(self, digits: str) -> List[str]:if not digits:return []self.dig2char = {'2':'abc','3':'def','4':'ghi','5':'jkl','6':'mno','7':'pqrs','8':'tuv','9':'wxyz'}self.chars = []self.res = []self.path = []for item in digits:self.chars.append(self.dig2char.get(item))self.backtracking(0)return self.resdef backtracking(self,starIdx):if starIdx >= len(self.chars):self.res.append("".join(self.path))returnchars = self.chars[starIdx]for char in chars:self.path.append(char)self.backtracking(starIdx + 1)self.path.pop()
http://www.xdnf.cn/news/7153.html

相关文章:

  • 探索 Python 的利器:help()、dir() 与 AI 工具的结合应用
  • Linux `touch` 命令深度解析与高阶应用指南
  • LangGraph深度解析:构建持久化、可观测的智能体工作流
  • Addressable-动态加载单个资源
  • DeepSeek 赋能基因编辑:从理论模型到临床实践的 AI 跃迁
  • 二:操作系统之进程控制块(PCB)
  • Redis实现分布式锁的进阶版:Redisson实战指南
  • Qt如何设置图标
  • Python3中的re.findall()和re.search()的区别是什么?
  • python学习day29
  • C++11关键字thread_local
  • 001 嵌入式软件开发工程师实习篇面试——首战总结
  • 使用 Auto-Keras 进行自动化机器学习
  • ElasticSearch-集群
  • 基于JAVA springboot+mybatis 电商书城平台系统设计和实现
  • day29 python深入探索类装饰器
  • FreeRTOS “探究任务调度机制魅力”
  • 数据清洗-案例
  • 浅谈迷宫类问题中的BFS和DFS
  • 【算法剖析】产值调整:从迭代到收敛,洞悉数字变化的本质
  • 【MySQL】(12) 事务
  • Java大师成长计划之第26天:Spring生态与微服务架构之消息驱动的微服务
  • 基于YOLOv8-OBB的旋转目标检测:从数据制作到自动标注完整指南
  • RAG检索增强生成(持续更新ing...)
  • vLLM - 控制生成过程中返回对数概率信息 logprobs的输出和解释
  • 计算机软件的基本组成
  • 本地无损放大软件-realesrgan-gui
  • AI 制作游戏美术素材流程分享(程序员方向粗糙版)
  • 计算机网络 - 2.基础协议
  • 日志参数含义