代码随想录算法训练营第22天—回溯算法02 | ● *216.组合总和III ● 17.电话号码的字母组合

*216.组合总和III

题目链接/文章讲解:https://programmercarl.com/0216.%E7%BB%84%E5%90%88%E6%80%BB%E5%92%8CIII.html
视频讲解:https://www.bilibili.com/video/BV1wg411873x

  • 考点

    • 回溯
    • 剪枝
  • 我的思路

    • 回溯三要素
      • 形参:目标和,组合大小,当前值,单个组合变量,结果变量;返回值为空
      • 退出条件:(这个地方一开始没想明白,要注意的是,退出条件一定要能让所有递归过程退出)当单个组合变量的长度等于组合大小时,返回;如果大小相等的同时和值也等于目标和,则将该组合变量加入结果变量中
      • 回溯逻辑
        • 循环范围是当前值到9
          • 首先把当前值加入单个组合变量
          • 把当前值+1进行递归
          • 把当前值弹出单个组合变量,完成回溯
    • 剪枝
      • 剪枝逻辑
      • 在递归的开始,如果发现和值大于目标和,则直接return
      • 在循环范围上,因为目标组合有大小限制,因此不需要遍历到9,设置range的上限为9 - (k - len(single_set)) + 2
  • 视频讲解关键点总结

    • 关键点结合我的思路放在一起了
  • 我的思路的问题

    • 退出条件和剪枝操作的思考不全面
  • 代码书写问题

  • 可执行代码

class Solution:def backtracking(self, cur, k, n, single_set, result):if sum(single_set) > n:returnif len(single_set) == k:if sum(single_set, 0) == n:result.append(single_set[:])returnfor i in range(cur, 9 - (k - len(single_set)) + 2):single_set.append(i)self.backtracking(i + 1, k, n, single_set, result)single_set.pop()def combinationSum3(self, k: int, n: int) -> List[List[int]]:result = []self.backtracking(1, k, n, [], result)return result

17.电话号码的字母组合

题目链接/文章讲解:https://programmercarl.com/0017.%E7%94%B5%E8%AF%9D%E5%8F%B7%E7%A0%81%E7%9A%84%E5%AD%97%E6%AF%8D%E7%BB%84%E5%90%88.html
视频讲解:https://www.bilibili.com/video/BV1yV4y1V7Ug

  • 考点
    • 回溯
  • 我的思路
    • 先创建字典来存放数字和字母的哈希映射
    • 回溯三要素
      • 形参:当前数字的索引,输入数字串,单个组合变量,结果变量,数字字母字典;返回值为空
      • 退出条件:单个组合变量的长度等于输入数字串时,将单个组合变量加入结果变量,之后返回
      • 回溯逻辑
        • 循环范围为当前数字对应的字母集合
          • 将字母加入单个组合变量
          • 索引加一并递归
          • 将当前字母弹出,完成回溯
  • 视频讲解关键点总结
    • 和我的思路一致
  • 我的思路的问题
  • 代码书写问题
  • 可执行代码
class Solution:def backtracking(self, index, digits, single_set, result, phone_table):if len(single_set) == len(digits):result.append(''.join(single_set))returnfor letter in phone_table[int(digits[index])]:single_set.append(letter)self.backtracking(index + 1, digits, single_set, result, phone_table)single_set.pop()def letterCombinations(self, digits: str) -> List[str]:if len(digits) == 0:return []phone_table = {2: ('a', 'b', 'c'), 3: {'d', 'e', 'f'}, 4: {'g', 'h', 'i'},5: ('j', 'k', 'l'), 6: {'m', 'n', 'o'}, 7: {'p', 'q', 'r', 's'},8: ('t', 'u', 'v'), 9: {'w', 'x', 'y', 'z'}}result = []self.backtracking(0, digits, [], result, phone_table)return result

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

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

相关文章

【数据结构与算法】动态规划法解题20240227

动态规划法 一、什么是动态规划二、动态规划的解题步骤三、509. 斐波那契数1、动规五部曲: 四、70. 爬楼梯1、动规五部曲: 五、746. 使用最小花费爬楼梯1、动规五部曲: 一、什么是动态规划 动态规划,英文:Dynamic Pro…

qt-C++笔记之使用QProcess去执行一个可执行文件时指定动态库所存放的文件夹lib的路径

qt-C笔记之使用QProcess去执行一个可执行文件时指定动态库所存放的文件夹lib的路径 参考博文: 1.C笔记之执行一个可执行文件时指定动态库所存放的文件夹lib的路径 2.Linux笔记之LD_LIBRARY_PATH详解 3.qt-C笔记之使用QProcess去执行一个可执行文件时指定动态库所存放…

C# EF Core迁移数据库

现象: 在CodeFirst时,先写字段与表,创建数据库后,再添加内容 但字段与表会变更,比如改名删除增加等 需求: 当表字段变更时,同时变更数据库,执行数据库迁移 核心命令 Add-Migrat…

保险防忽悠指南

保险如何防忽悠? 1.只买消费型保险,不要买返还型保险。许多人买保险被忽悠,就是因为买了返还型保险。返还型保险保费贵,保额低,收益又低。消费型保险保费便宜,保额高,杠杆高。 圣经有云:上帝的…

什么是SSH端口转发?

目录 前言: 一、SSH端口转发的概念 二、SSH端口转发的类型 2.1 本地端口转发 2.2 远程端口转发 2.3 动态端口转发 三、SSH端口转发的用途 3.1 安全远程访问 3.2 跨越网络限制 3.3 加密流量传输 3.4 跨越 NAT 网络 3.5 安全代理 四、总结 前言&#xff…

函数重载 C++

在同一作用域中声明几个功能类似的同名函数&#xff0c;这些函数的形参列表不同&#xff08;个数或类型&#xff09; #include<iostream> using namespace std; // 1、参数类型不同 int Add(int left, int right) {cout << "int Add(int left, int right)&qu…

Spring Bean

Spring的配置方式 1、xml配置文件 2、基于注解的方式 3、基于Java的方式 Spring Bean的生命周期 1、通过构造器或工厂方法创建bean实例 2、为bean的属性赋值 3、调用bean的初始化方法 4、使用bean 5、当容器关闭时&#xff0c;调用bean的销毁方法 Spring inner beans …

【es6 】中的装饰器 decorator 到底是什么,有什么用,和ts 中的装饰器decorator有啥区别

es6 中的装饰器 decorator 再 es6 中新增了 3个器&#xff0c;分别是 迭代器、生成器、还有就是装饰器&#xff0c;关于迭代器和生成器可以参考这篇文章。​​​​ 装饰器实际上是 es7 提出来的&#xff0c;它允许你在类、类方法、类属性等声明前面添加特殊的修饰符&#xff…

octave 与 matlab

octave 与 matlab 联系与区别 Octave 和 Matlab 是两种数字计算和科学编程语言。它们之间有很多联系和区别。 联系&#xff1a; Octave 和 Matlab 都是为了进行数值计算和科学编程而设计的&#xff0c;它们都具有很强的数值计算和矩阵操作的能力。Octave 和 Matlab 都支持向量…

Spring中@Transactional注解的方法在不同Bean调用时的事务生效性

在Spring框架中&#xff0c;Transactional注解用于声明一个方法或类需要事务管理。当一个方法被Transactional注解标记时&#xff0c;Spring会为该方法的执行创建一个新的事务&#xff08;如果当前没有事务存在的话&#xff09;&#xff0c;或者在现有事务的上下文中运行&#…

记录 | docker内修改host方法

方法一&#xff1a; 直接进入容器中修改/etc/hosts 缺点&#xff1a;重启容器后&#xff0c;增加的内容会丢失 方法二&#xff1a; 制作镜像的时候&#xff0c;直接修改。 限制&#xff1a; 需要是root用户&#xff0c;需要在容器中安装sudo 增大了镜像大小 方法三&…

LeetCode 3019.按键变更的次数

给你一个下标从 0 开始的字符串 s &#xff0c;该字符串由用户输入。按键变更的定义是&#xff1a;使用与上次使用的按键不同的键。例如 s “ab” 表示按键变更一次&#xff0c;而 s “bBBb” 不存在按键变更。 返回用户输入过程中按键变更的次数。 注意&#xff1a;shift …

如何在安卓手机与电脑上写文章直接发布至自己的hexo静态博客网站上

#需求 1.当有了自己的hexo博客之后,就想随时随地在不同的设备之间写文章&#xff0c;并发布到自己的博客上。 #过程 2.突然有一天逛到别人的博客上&#xff0c;看到别人写了一篇文章&#xff0c;是用小书匠&#xff0c;能实现不同的设备写文章并发送至自己的静态网站。 #实现 3…

Java最新面试宝典 Spring面试题

Java最新面试宝典 Spring面试题 前言1、Spring是什么&#xff1f;2、Spring 的优点&#xff1f;3、什么是IOC&#xff1f;4、什么是 AOP&#xff1f;5、AOP 有哪些实现方式&#xff1f;6、什么是DI依赖注入&#xff1f;7、将一个类声明为Spring的 bean 的注解有哪些&#xff1f…

推荐收藏!商汤智能座舱算法岗面试题7道(含解析)!

节前&#xff0c;我们组织了一场算法岗技术&面试讨论会&#xff0c;邀请了一些互联网大厂同学、参加社招和校招面试的同学&#xff0c;针对算法岗技术趋势、大模型落地项目经验分享、新手如何入门算法岗、该如何准备、面试常考点分享等热门话题进行了深入的讨论。 今天我整…

vue3.0 ref的使用

一.在vue2中定义变量 在使用vue2的时候,我们定义变量会在data中进行定义&#xff0c;那么我们在vue3中是如何定义变量的呢&#xff1f;我们会使用ref来进行定义。 (1)我们通过一个简单的案例来看 代码&#xff1a; <template> <div><button click"coun…

支持向量机|机器学习方法(李航)

支持向量机&#xff0c;可以看着是升级版的感知机&#xff0c;与感知机相比。他们都是找到一个超平面对数据集进行分割&#xff0c;区别在于&#xff0c;感知机模型得到的超平面空间中可以有无穷个超平面&#xff0c;但支持向量机仅含有一个&#xff0c;这一个超平面与样本点的…

Syslog日志采集

Syslog日志采集 1、Linux rsyslog服务1.1、安装rsyslog1.2、配置客户端1.3、配置服务端 2、Filebeat 服务端2.1、安装Filebeat2.2、配置Filebeat 3、Java程序服务端3.1、服务端代码 Syslog日志采集需要syslog客户端和syslog服务端&#xff0c;客户端负责发送日志、服务端负责采…

matplotlib plt.show()却弹出空白框并之后自动退出程序的原因及解决方法

运行下列代码并使用plt.show()进行展示时候&#xff0c;cmd输出如下&#xff1a; 先弹出空白框&#xff1a; 而后直接退出程序&#xff1a; 之前遇到过很多次&#xff0c;由于不输出Traceback&#xff0c;完全不知道什么原因。结果发现是因为没有导入torch导致的。 解决办法就…

C++面试 -操作系统-安全能力:内存溢出、内存泄漏的原因与解决

目录 内存溢出&#xff08;Memory Overflow&#xff09; 内存溢出介绍 解决内存溢出问题的方法 内存泄漏&#xff08;Memory Leak&#xff09; 内存泄露基础 解决内存泄漏问题的方法 内存溢出&#xff08;Memory Overflow&#xff09; 内存溢出介绍 内存溢出是指程序在执…