解法框架

【README】回溯算法基本框架

电话号码的组合(点击跳转)

对于这道题,很明显涉及到的也是回溯算法。但是这道题有一特别之处,就是它的选择列表给的不明显,回想全排列那道题目,其选择列表给出的十分明显。此题之中则是多了一层映射关系,所以必须有一个类似于哈希表的结构保存这种映射关系,这里直接使用vector即可

vector<string> map={"","","abc","def","ghi","jkl","mno","pqrs","tuv","wxyz"};//选择列表

首先,这道题的形参是一个字符串,这个字符串中有若干数字字符,每个字符都对应了相应的字母列表,函数的返回值是一个一维数组,数组的每个元素是一个字符串,字符串里保存的是满足条件的组合

因此摆出,回溯算法基本框架

接下来编写递归函数back,路径肯定是track,但是选择列表呢?是选择digits呢还是map呢,其实这也是本题的一个难点。以“23”为例,其决策树如下

可以发现这种对应关系有些“奇怪”,让人很难受,它并不是单纯的对应,其难受点就在于这个数字和字母的对应上。比如当处理2时,第一个加入路径的是a,然后此时下一个应该选择d,但是问题就在这里,d对应的是数字3,已经不是2的范畴了。所以这个选择列表应该有两部分组成,一个是digits,一个是index,index用于控制数字。每次进入递归时,根据index拿到数字,然后根据数字在map中找到对应的字母列表,然后开始选择操作。

class Solution {public:vector<string> ret;//返回结果vector<string> map={"","","abc","def","ghi","jkl","mno","pqrs","tuv","wxyz"};//选择列表vector<string> letterCombinations(string digits) {string track;//路径if(digits.size()==0)//特殊情况{return ret;}back(track,digits,0);return ret;}void back(string track,string digits,int index)//遍历决策树{if(track.size()==digits.size())//一条路径已经走完,可以加上这种情况{ret.push_back(track);return;}int pos=digits[index]-'0';//根据index拿出数字,所以pos就决定了要选择哪个按键上的字母string temp=map[pos];//temp里保存的就是字母for(int i=0;i<temp.size();i++)//遍历选择列表{   track.push_back(temp[i]);//做出选择back(track,digits,index+1);//遍历决策树,index肯定要加1,因为//一个按键上只能选择一个字母track.pop_back();//撤销选择}}
};

所以这道题相较于全排列来说就多了一层映射关系。在全排列时我们选择数字不能出现重复,其实这里也是一样,我们选择字母不能第一次和第二次都在一个按键上选择字母

回溯算法之电话号码的字母组合相关推荐

  1. leetcode 回溯算法 17. 电话号码的字母组合

    电话号码的字母组合 给定一个仅包含数字 2-9 的字符串,返回所有它能表示的字母组合.答案可以按 任意顺序 返回. 给出数字到字母的映射如下(与电话按键相同).注意 1 不对应任何字母. 示例 1: ...

  2. 一刷72-回溯算法-17电话号码的字母组合(m)

    题目: 给定一个仅包含数字 2-9 的字符串,返回所有它能表示的字母组合.答案可以按 任意顺序 返回.给出数字到字母的映射如下(与电话按键相同).注意 1 不对应任何字母. 输入:digits = & ...

  3. 回溯_leetcode.17.电话号码的字母组合

  4. 数字拆分问题算法回溯_回溯算法:求子集问题!

    给「代码随想录」一个星标吧! ❝ 认识本质之后,这就是一道模板题 通知:我将公众号文章和学习相关的资料整理到了Github :https://github.com/youngyangyang04/le ...

  5. 本题要求实现一个求整数的逆序数的简单函数。_回溯算法:求组合总和(二)...

    给「代码随想录」一个星标吧! ❝ 我将公众号文章和学习相关的资料整理到了Github :https://github.com/youngyangyang04/leetcode-master,方便大家在 ...

  6. 「leetcode」最强回溯算法总结篇!历时21天、画了20张树形结构图、14道精选回溯题目精讲

    本文 https://github.com/youngyangyang04/leetcode-master 已经收录,里面还有leetcode刷题攻略.各个类型经典题目刷题顺序.思维导图,可以fork ...

  7. [17]岛屿数量和电话号码的字母组合

    *内容来自leetcode 1.岛屿数量 题目要求 给你一个由 '1'(陆地)和 '0'(水)组成的的二维网格,请你计算网格中岛屿的数量. 岛屿总是被水包围,并且每座岛屿只能由水平方向和/或竖直方向上 ...

  8. 回溯算法与深度优先算法

    搜索与回溯是计算机竞赛中常用的算法,当很多问题无法通过计算法则来求解时,便可以利用搜索和回溯的技术来求解. 回溯是搜索算法中的一种控制策略,它的基本思想是:为了求得问题的解,先选择一种可能的情况向前探 ...

  9. 003. 电话号码的字母组合——回溯算法

    1.题目链接: 17. 电话号码的字母组合 2.解题思路: 2.1.题目要求: 给定一个仅包含数字 2-9 的字符串 digits ,返回所有它能表示的字母组合. 数字和字母的关系: 例子: 输入:& ...

最新文章

  1. docker Rails Permission denied @ dir_s_mkdir
  2. 中国数字化进程比发达国家快,小程序让我感到自豪 | IT领袖峰会
  3. 疯狂ios讲义疯狂连载之游戏的状态数据模型
  4. div居中 边框设置 文字行高设置
  5. 按字符串长度切割字符串(支持汉字占2个长度)
  6. [ACTF新生赛2020]fungame
  7. 在Linux上安装CHM查看工具
  8. 输入框限制只能输入数字,正数、负数、0,最多两位小数;数字输入框可以输入负数,并最多保留两位小数;el-number-input去掉四舍五入和自动补齐小数;
  9. 2018--20179215--《文献管理与信息分析》第三讲 英文数据库资源的发展趋势和利用...
  10. 性能提升3倍、时延降低70%,阿里云企业级存储ESSD云盘再升级!
  11. 【Spring】Spring 父子容器
  12. 五万pv的小程序需要什么服务器,一个公式,告诉你PV千万的刷屏小程序都是怎么玩的...
  13. asp.net 两个控件放一行_思维导图?试试这两个宝藏网站吧
  14. 关于handler的再次讨论
  15. java list stream avg_Java8之list.stream的常见使用
  16. 【AI视野·今日CV 计算机视觉论文速览 第189期】Fri, 1 Jan 2021
  17. java校园圈子论坛跳蚤市场小程序源码
  18. 十年前开发的平板游戏:HyllCube 三维四子棋游戏,获得了全国一等奖
  19. 04网络爬虫-批量下载网站图片
  20. 【算法笔记】异或运算的奇妙之处

热门文章

  1. 经典面试题(22):以下代码将输出的结果是什么?
  2. 请说说你对标签语义化的理解?
  3. mac升级php后旧版本还在,Mac下更新自带的PHP版本
  4. 大数据2019年的三大趋势你看了吗?
  5. CIRIquant:circRNA定量和剪接体转换识别
  6. 易生信转录组培训第一期总结
  7. Ps胶片颗粒效果插件:Imagenomic Realgrain for Mac
  8. 每天一个实用小技巧!归纳多个文件、批量修改文件名
  9. Mac提示app损坏、Error,Mac电脑最常见错误的解决方案
  10. SIP系统怎么禁用?SIP系统完整性保护关闭方法(含M1)