LeetCode 216.组合总和III

链接:216. 组合总和 III

思路:

这道题目与77. 组合仅有一点不同,就是这道题目找到的组合的总和需要满足额外的条件。所以在递归终止条件里增加了一个条件就是当sum==n的时候才把答案push进最终结果里。除此之外,还有一点区别就是这里的n不再是作为搜索范围而存在的,而是以target而存在的,题目里提到了每一个数都可以从1到9里面选择,所以搜索范围就变成了i <=9,并且这里也用上了和之前一样的剪枝,即当从i开始到9结束的数组长度小于要求的数组长度k时,可以直接跳过循环。

代码:

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

LeetCode 17.电话号码的字母组合

链接:17. 电话号码的字母组合

思路:

这道题目本质上还是找字母的组合,只不过这里手动划分了每颗子树的搜索范围。我们可以根据电话号码的按键及对应的字母构建一个哈希表,然后根据输入的数字来获取相对应的字母的集合,该集合即为每颗子树的搜索范围。在for循环里,我们用chars代表了每个数字对应的字母的集合的长度,然后在该数字对应的字母的集合上进行搜索和回溯。

需要注意的是我们使用了numIdx来表示当前所在数字的位数,用来索引digits获取里面的由char表示的2~9之间的数字,然后通过减‘0’的方式把该数字转换成int类型,再用转换好的int类型取hashmap里索引该数字对应的字母表。

在节省空间方面其实可以用更加有效率的数组来做哈希表,因为实际上数字范围一共只有0~9,所以只需要一共大小为10的数组记录每个数字对应的字母即可。

    const string letterMap[10] = {"", // 0"", // 1"abc", // 2"def", // 3"ghi", // 4"jkl", // 5"mno", // 6"pqrs", // 7"tuv", // 8"wxyz", // 9};

代码:

class Solution {
public:unordered_map<int, vector<char>> hashmap{{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'}}};vector<string> ans;string temp;vector<string> letterCombinations(string digits) {backtracking(digits, 0);return ans;}void backtracking(string &digits, int numIdx){if (numIdx > digits.size() - 1){ans.push_back(temp);return;}// 获取当前数字所代表的字母串vector<char> chars = hashmap[digits[numIdx] - '0'];// 遍历字母串,把每次遍历的元素放入stringfor (int i = 0; i < chars.size(); i++){temp.push_back(chars[i]);backtracking(digits, numIdx + 1);// 回溯temp.pop_back();}return;}
};

代码随想录算法训练营第二十五天|216.组合总和III、17.电话号码的字母组合相关推荐

  1. 代码随想录算法训练营第二十五天|216.组合总和III 17.电话号码的字母组合

    目录 LeeCode 216.组合总和III LeeCode 17.电话号码的字母组合 LeeCode 216.组合总和III 216. 组合总和 III - 力扣(LeetCode) 思路:本题和 ...

  2. 代码随想录第二十五天|261.组合总和、17.电话号码的字母组合

    261.组合总和 找出所有相加之和为 n 的 k 个数的组合.组合中只允许含有 1 - 9 的正整数,并且每种组合中不存在重复的数字. class Solution { private:vector& ...

  3. 代码随想录算法训练营第24天25天|● 77. 组合● 216.组合总和III ● 17.电话号码的字母组合

    77组合 看完题后的思路 void f(数组,startIndex) 递归终止 if(startIndex数组长度||path.sizek){ if(path.size==k){ 加入} } 递归 f ...

  4. 代码随想录第25天|216.组合总和III ● 17.电话号码的字母组合

    216.组合总和Ⅲ 回溯三部曲 确定递归函数参数 需要一维数组path来存放符合条件的结果,二维数组result来存放结果集. 接下来还需要如下参数: targetSum(int)目标和,也就是题目中 ...

  5. 攻克代码随想录Day25 | 216. 组合总和 III | 17. 电话号码的字母组合

    216. 组合总和 III 在该题中,题目的整体思路与之前的77. 组合思路是相似的.但在本体中,我选择从1-9遍历每一种可能性.然后将与k相等的组合进行判定,若之和与n相等,则将其push进去,否则 ...

  6. 【代码随想录二刷】day 25 | 216.组合总和III 17.电话号码的字母组合

    二刷主要记录理解不一样的题 一刷地址:day25 今日题目:中等 组合总和III :注意剪枝操作:①sum>n:②path.size()>k class Solution {LinkedL ...

  7. 代码随想录第22天 | ● 216.组合总和III ● 17.电话号码的字母组合

    216.组合总和III /*** @param {number} k* @param {number} n* @return {number[][]}*/ let path = []; let roa ...

  8. 代码随想录算法训练营第十五天 | 层序遍历 10,226.翻转二叉树,101.对称二叉树 2

    代码随想录算法训练营第十五天 | 层序遍历 10,226.翻转二叉树,101.对称二叉树 2 1.1 层序遍历 10 1.1.1 102.二叉树的层序遍历 思路: 通过队列实现 class Solut ...

  9. 代码随想录训练营第25天|216.组合总和 Ⅲ、17.电话号码的字母组合

    216.组合总和 Ⅲ.17.电话号码的字母组合 216.组合总和 Ⅲ 与总和问题相似,组合总和Ⅲ无非就是多了一个判断和的操作,因此,也会产生一些剪枝操作. 很显然,同组合一样,我们创建两个全部变量一维 ...

最新文章

  1. linux32内核下载rpm,Vivaldi TP4 for Linux Rpm (32bit)
  2. 一篇文章熟悉ubuntu desktop指南
  3. NULL,,String.Empty三者在C#中的区别
  4. mysql fetch next from_MySql 存储过程 动态sql
  5. python工厂模式 简书_[Python设计模式] 01 - 简单工厂模式
  6. Atom 编辑器系列视频课程
  7. Go语言的指针的一些测试
  8. 博客园的第一篇文章-----述学习编程的开始与经历
  9. MKAnnotationView,MKAnnotation与MKMapView结合使用显示坐标点
  10. PPT绘图之AI助力论文图
  11. Arcgis Engine 面的创建和设置
  12. 计算机专升研学院推荐,【解析】专升硕院校专业推荐
  13. WPARAM 与 LPARAM
  14. < C++11新特性(部分学习)>——《C++高阶》
  15. 计算机类专业工程认证,我校计算机科学与技术、测绘工程专业通过中国工程教育专业认证...
  16. BindingException: Mapper method ‘com.itheima.dao.BookDao.update‘ has an un unsupported return
  17. 首款MeeGo系统上网本 华硕Eee PcX101H独家首测(2-3)
  18. 别再说,不懂什么是图数据了
  19. 过来看~/(≧▽≦)/~啦啦啦!!各种书本课后答案!——第二部分:【化学物理】
  20. JAP中@Temporal

热门文章

  1. 2023年,新年伊始,万象更新,我的生活也将是全新的!
  2. sharepoint页面嵌入_Part 1: 如何把Power BI 嵌入到sharepoint 网站
  3. 【调研】在线考试系统调研
  4. css实现文字过长显示省略号的方法
  5. java多边形晕线的方法_如何在OpenCV中绘制一组封闭的多边形曲线,将每个线段表示为不同的颜色(即在彩虹色空间中)?...
  6. bzoj3572世界树 虚树+树型动规
  7. 深度学习 — — PyTorch入门(三)
  8. runtime error: reference binding to null pointer of type ‘int‘ (stl_vector.h)
  9. 基于AS3933 - 3通道125K低频唤醒接收器
  10. 字符串替换某个位置的字符