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

代码随想录训练营第二十二天 77组合

第一题:

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

思路:

经典的回溯模板题:

终止条件,当中间变量用来存储单个结果的大小等于k,则将中间变量存放到结果数组中。

一个for循环横向遍历,递归为纵向遍历。

递归后要进行回溯。

代码如下:

class Solution {
public:vector<vector<int>> combine(int n, int k) {backtracking(n, k, 1);return res;}
private:vector<vector<int>> res;vector<int> path;void backtracking(int n, int k, int startIndex){if(path.size() == k){res.push_back(path);return;}for(int i = startIndex; i <= n; i++){path.push_back(i);backtracking(n, k, i + 1);path.pop_back();}}
};

第二题:

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

思路:

同样的回溯模板题:

需要用一个sum来记录当前所有元素加起来的值是多少,然后和n进行比较即可。同时需要一个path来记录单个组合。

回溯的时候单个组合要pop_back(),sum要pop掉的那个值。

代码如下:

class Solution {
public:vector<vector<int>> combinationSum3(int k, int n) {backtracking(k, n, 0, 1);return res;}
private:vector<vector<int>> res;vector<int> path;void backtracking(int k, int n, int sum, int startIndex){if(path.size() == k && sum == n){res.push_back(path);return;}for(int i = startIndex; i <= 9; i++){path.push_back(i);sum += i;backtracking(k, n, sum, i + 1);sum -= i;path.pop_back();}}
};

第三题:

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

思路:

这题是有思路但是写不出来。

for循环遍历的是字符串中每个数字对应的英文字母。

递归是为了找到下一个位置的数字对应的英文字母。

需要用Index来指向当前遍历到字符串的哪个位置。在递归的时候+1表示遍历到下一个位置。

本题需要用一个string数组来记录每个数字对应的字符串。注意0和1下标对应的字符串为空。从2开始才有字符串。

终止条件:

中间变量的大小等于输入字符串的大小则存放入res数组中。

先将输入字符串的字符转换为数字。然后在找到数字对应的字符串后进行for循环。

最后就是进行递归和回溯。

代码如下:

class Solution {
public:vector<string> letterCombinations(string digits) {if(digits.size() == 0) return {};backtracking(digits, 0);return res;}
private:const string lettermap[10] = {"","","abc","def","ghi","jkl","mno","pqrs","tuv","wxyz",};vector<string> res;string s;void backtracking(string digits, int index){if(s.size() == digits.size()){res.push_back(s);return;}int num = digits[index] - '0';string letter = lettermap[num];for(int i = 0; i < letter.size(); i++){s += letter[i];backtracking(digits, index + 1);s.pop_back();}}
};

http://www.lryc.cn/news/385087.html

相关文章:

  • Unity踩坑记录
  • 内容安全复习 1 - 信息内容安全概述
  • 【深度学习】python之人工智能应用篇--跨模态生成技术
  • springboot中获取某个注解下面的某个方法的方法名,参数值等等详细实例
  • 代码随想录——跳跃游戏Ⅱ(Leetcode 45)
  • 从0-1搭建一个web项目(package.json)详解
  • 图解ReentrantLock的基石AQS-独占锁的获取与释放
  • Perl语言入门学习读物
  • 电脑浏览器问题
  • [Docker] Ubuntu安装Home Assistant
  • 浅谈请求中数据转换
  • Flutter学习:从搭建环境到运行
  • sheng的学习笔记-AI-聚类(Clustering)
  • 从0构建一个录制UI测试工具
  • 代码随想录算法训练营第五十一天|LeetCode72 编辑距离、LeetCode647 回文子串、LeetCode516 最长回文子序列、动态规划的小总结
  • sessionStorage 能在多个标签页之间共享数据吗?
  • 鸿蒙期末项目(完结)
  • 【Linux】对共享库加载问题的深入理解——基本原理概述
  • easyui的topjui前端框架使用指南
  • Java中的程序异常处理介绍
  • Gradle学习-3 Gradle插件
  • 百度文心智能体,创建属于自己的智能体应用
  • 【软件测试】白盒测试与接口测试详解
  • 【SpringBoot Web框架实战教程】03 SpingBoot 获取 http 请求参数
  • Mac14.1.2 M1芯片免费读写ntfs硬盘-亲测有效,免费!!!
  • 手写SpringMVC之ApplicationContextListener
  • Paimon 在汽车之家的业务实践
  • 2024-06-27 问AI: 介绍一下 LLM building process
  • 猫也有自动厕所上了吗?自费分享好用的智能猫砂盆,看完不亏。
  • 《分析模式》漫谈07-怎样把一张图从不严谨改到严谨