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

代码随想录算法训练营Day22 | Leetcode 77 组合 Leetcode 216 组合总和Ⅲ Leetcode17 电话号码的字母组合

前言

回溯算法中递归的逻辑不重要,只要掌握回溯的模板以及将问题转化为树形图,整个问题就很好解决了,比二叉树简单。

 Leetcode 77 组合

题目链接:77. 组合 - 力扣(LeetCode)

代码随想录题解:代码随想录 (programmercarl.com)

思路:套回溯的模板,终止条件是path==k。然后将题目描述的组合逻辑想象成树形结构

代码:

class Solution {
public:vector<int> path;vector<vector<int>>res;void backtracking(int n,int k, int index){if(path.size()==k)//终止条件{res.push_back(path);return;}for(int i=index;i<=n;i++)树形结构逻辑{path.push_back(i);backtracking(n, k, i+1);path.pop_back();回溯}return;}vector<vector<int>> combine(int n, int k) {backtracking(n, k, 1);return res;}
};

Leetcode 216 组合总和Ⅲ

题目链接:216. 组合总和 III - 力扣(LeetCode)

代码随想录题解:代码随想录 (programmercarl.com)

思路:这个题和上一道题唯一的区别就是终止条件加了一个和等于目标值,树形结构基本没变

代码:

class Solution {
public:vector<int> path;vector<vector<int>>res;int sum=0;void backtracking(int k,int n,int index){if(sum==n&&path.size()==k)//终止条件{res.push_back(path);return;}for(int i=index;i<=9;i++)树形结构逻辑{path.push_back(i);sum+=i;backtracking(k, n, i+1);sum-=i;//回溯path.pop_back();}return;}    vector<vector<int>> combinationSum3(int k, int n) {backtracking(k, n, 1);return res;}
};

Leetcode17 电话号码的字母组合

题目链接:17. 电话号码的字母组合 - 力扣(LeetCode)

代码随想录题解:代码随想录 (programmercarl.com)

思路:这道题目的终止条件和上面三道题几乎一样,只不过树形逻辑要通过一个二维字符串数组做一个映射。

代码:

class Solution {
public:string letterMap[10] = {"", // 0"", // 1"abc", // 2"def", // 3"ghi", // 4"jkl", // 5"mno", // 6"pqrs", // 7"tuv", // 8"wxyz", // 9};string path;vector<string> res;void backtracking(string a,int index){if(path.size()==a.size())//终止条件{res.push_back(path);return;}int digit=a[index]-'0';//映射string letter=letterMap[digit];for(int i=0;i<letter.size();i++)//树形结构逻辑{path.push_back(letter[i]);backtracking(a, index+1);path.pop_back();//回溯}return;}vector<string> letterCombinations(string digits) {if(digits.size()==0){return res;}backtracking(digits, 0);return res;}};

总结

求解回溯模板需要想好终止条件以及树形逻辑的代码编写,不需要仔细思考递归逻辑,相比于二叉树的各种遍历简单许多。

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 基于内地城市生活垃圾收运场景的路线规划算法
  • 服务器 Linux 的网络信息
  • 【网络安全】探索AI 聊天机器人工作流程实现RCE
  • Unity补完计划 之 SpriteEditer SingleMode
  • 【C++】C++入门基础【类与对象】
  • HslCommunicationDemo各品牌Plc通信测试软件工具
  • 常见cms漏洞之dedecms
  • linux安装weblogic
  • C基础练习(学生管理系统)
  • Golang | Leetcode Golang题解之第316题去除重复字母
  • Machine_Matrix打靶渗透【附代码】(权限提升)
  • 解决ubuntu 下 SSH无法连接的问题
  • YOLOv8由pt文件中读取模型信息
  • MongoDB 未授权访问漏洞
  • c# 逻辑运算符和条件运算符
  • 「译」Node.js Streams 基础
  • android图片蒙层
  • Angular 4.x 动态创建组件
  • ES6系统学习----从Apollo Client看解构赋值
  • JAVA并发编程--1.基础概念
  • linux安装openssl、swoole等扩展的具体步骤
  • PermissionScope Swift4 兼容问题
  • Promise面试题2实现异步串行执行
  • Python语法速览与机器学习开发环境搭建
  • Quartz实现数据同步 | 从0开始构建SpringCloud微服务(3)
  • React系列之 Redux 架构模式
  • Vim 折腾记
  • 分类模型——Logistics Regression
  • 漫谈开发设计中的一些“原则”及“设计哲学”
  • 前端面试之闭包
  • 思维导图—你不知道的JavaScript中卷
  • 腾讯优测优分享 | Android碎片化问题小结——关于闪光灯的那些事儿
  • 王永庆:技术创新改变教育未来
  • 我建了一个叫Hello World的项目
  • 追踪解析 FutureTask 源码
  • 组复制官方翻译九、Group Replication Technical Details
  • ​LeetCode解法汇总2808. 使循环数组所有元素相等的最少秒数
  • # 利刃出鞘_Tomcat 核心原理解析(二)
  • #我与Java虚拟机的故事#连载09:面试大厂逃不过的JVM
  • (02)vite环境变量配置
  • (1)(1.8) MSP(MultiWii 串行协议)(4.1 版)
  • (42)STM32——LCD显示屏实验笔记
  • (55)MOS管专题--->(10)MOS管的封装
  • (C语言)逆序输出字符串
  • (NO.00004)iOS实现打砖块游戏(十二):伸缩自如,我是如意金箍棒(上)!
  • (pojstep1.1.2)2654(直叙式模拟)
  • (读书笔记)Javascript高级程序设计---ECMAScript基础
  • (六)软件测试分工
  • (三)mysql_MYSQL(三)
  • (学习日记)2024.03.12:UCOSIII第十四节:时基列表
  • (一) springboot详细介绍
  • ..回顾17,展望18
  • .bat批处理出现中文乱码的情况
  • .NET BackgroundWorker
  • .net core 实现redis分片_基于 Redis 的分布式任务调度框架 earth-frost