首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

回溯算法:电话号码的字母组合

❞ 17.电话号码的字母组合 给定一个仅包含数字 2-9 的字符串,返回所有它能表示的字母组合。 给出数字到字母的映射如下(与电话按键相同)。注意 1 不对应任何字母。...17.电话号码的字母组合 示例: 输入:"23" 输出:["ad", "ae", "af", "bd", "be", "bf", "cd", "ce", "cf"]....大家应该感觉出和回溯算法:求组合问题!遇到的一样的问题,就是这for循环的层数如何写出来,此时又是回溯法登场的时候了。...注意这个index可不是 回溯算法:求组合问题!和回溯算法:求组合总和!中的startIndex了。...和回溯算法:求组合总和!中从startIndex开始遍历的」。 「因为本题每一个数字代表的是不同集合,也就是求不同集合之间的组合,而77. 组合和216.组合总和III都是是求同一个集合中的组合!」

1.3K20
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    ☆打卡算法☆LeetCode 17、电话号码的字母组合 算法解析

    一、题目 1、算法题目 “返回给定仅包含数字2-9的字符串的所有可能的字母组合。” 题目链接: 来源:力扣(LeetCode) 链接:17....电话号码的字母组合 - 力扣(LeetCode) (leetcode-cn.com) 2、题目描述 给定一个仅包含数字 2-9 的字符串,返回所有它能表示的字母组合。答案可以按 任意顺序 返回。...当题目中出现所有组合字样的时候,就要考虑要用回溯法,使用回溯算法找到所有的可行解,发现一个解不行,舍弃不可行的解,穷举所有解即可。...在题目中出现找出所有组合的字样的时候,就要想到是否可以用回溯算法。 在使用回溯算法的时候如果发现一个解不可行,则会舍弃不可行的解。...在这道题中,由于每个数字对应的每个字母都可能进入字母组合,因此不存在不可行的解,直接穷举所有的解即可。

    27960

    电话号码的字母组合----回溯算法

    ---- 电话号码的字母组合题解集合 引言 回溯算法 BFS---队列求解 总结 ---- 引言 如果对回溯算法不了解的,建议先看这篇文章 小白易懂的回溯算法!!!...---- 回溯算法 将问题转化为对一颗多叉树的遍历过程,可以大大简化思维和实现难度 由上图可得: 递归结束条件: 输入的数字个数与当前已经找到的字母个数一致,说明找到了一个可行方案,然后将可行方案保存到...,等到字母个数等于需要的个数时,再压入结果数组 //num: 组合需要的字母个数 //n:当前用到了第一个数字 void dfs(string digits,string cur,int num,...(); } } }; ---- BFS—队列求解 其实上面的DFS的思路就是先选取第一个数字对应的第一个字母,然后去下一层与第二个数字的三个字母分别进行组合组合完后,再取第一个数字对应的第二个字母...,同样去下一层与第二个数字的三个字母进行组合,接着是第一个数字对应的第三个字母… 那么这里同样可以利用BFS的方法实现上述思路,看图: 我们可以利用队列的先进先出特点,再配合循环完成题目要求。

    23220

    电话号码的字母组合

    首先使用哈希表存储每个数字对应的所有可能的字母,然后进行回溯操作。 回溯过程中维护一个字符串,表示已有的字母排列(如果未遍历完电话号码的所有数字,则已有的字母排列是不完整的)。该字符串初始为空。...每次取电话号码的一位数字,从哈希表中获得该数字对应的所有可能的字母,并将其中的一个字母插入到已有的字母排列后面,然后继续处理电话号码的后一位数字,直到处理完电话号码中的所有数字,即得到一个完整的字母排列...然后进行回退操作,遍历其余的字母排列。 回溯算法用于寻找所有的可行解,如果发现一个解不可行,则会舍弃不可行的解。...在这道题中,由于每个数字对应的每个字母都可能进入字母组合,因此不存在不可行的解,直接穷举所有的解即可。...当输入包含 个对应 个字母的数字和 个对应 个字母的数字时,不同的字母组合一共有 种,需要遍历每一种字母组合

    15710

    电话号码的字母组合

    首先使用哈希表存储每个数字对应的所有可能的字母,然后进行回溯操作。 回溯过程中维护一个字符串,表示已有的字母排列(如果未遍历完电话号码的所有数字,则已有的字母排列是不完整的)。该字符串初始为空。...每次取电话号码的一位数字,从哈希表中获得该数字对应的所有可能的字母,并将其中的一个字母插入到已有的字母排列后面,然后继续处理电话号码的后一位数字,直到处理完电话号码中的所有数字,即得到一个完整的字母排列...然后进行回退操作,遍历其余的字母排列。 回溯算法用于寻找所有的可行解,如果发现一个解不可行,则会舍弃不可行的解。...在这道题中,由于每个数字对应的每个字母都可能进入字母组合,因此不存在不可行的解,直接穷举所有的解即可。...当输入包含 个对应 个字母的数字和 个对应 个字母的数字时,不同的字母组合一共有 种,需要遍历每一种字母组合

    21410

    组合问题——LeetCode题目17:电话号码的字母组合

    原题描述 + 给定一个仅包含数字 2-9 的字符串,返回所有它能表示的字母组合。给出数字到字母的映射如下(与电话按键相同)。注意 1 不对应任何字母。 ?...我希望你能有一个刷题经验:凡是涉及到排列组合的题目,基本都可以通过递归解决。因为不管是排列还是组合,都是从先求子问题,然后再求原问题。递推和递归是数学和编程中非常重要的思想,多写多练才会有感觉。...3.从特殊到一般——当给定多个集合时 先假设只有三个集合 ,不跳步的做法是,先求 和 的组合情况,返回一个新的集合 ,然后再做 和 的组合情况即为所求。...假设 表示从第 个集合到第 个集合的组合结果, 表示第 个集合,那么有如下递推关系:好了,现在你可以写代码了。...虽然递归程序的时间复杂度并不是最优的,但递归程序确实能够显示出一个人对问题的理解深度,分而治之是算法中的常用策略,希望大家多多练习。 这道题你会了,那么请你思考另一个问题——全排列应该怎么求?

    58020

    LeetCode - 电话号码的字母组合

    给定一个仅包含数字 2-9 的字符串,返回所有它能表示的字母组合...给出数字到字母的映射如下(与电话按键相同)。注意 1 不对应任何字母。 ?...这题的主要思路和之前集合相关的题目很像,比如求所有子集 新建每个按键的字母组合...,static变量有效减少内存占用 再次使用递归的方式,三个参数分别是输入的数字、当前读到第几位数字、当前的字母组合 在每次递归时,根据当前读到第几位数字,获取该数字对应的字母列表,为当前集合中的所有字母组合都加上该字母...去除集合中的头几个元素,因为没有包括当前字母,然后接着递归 中文官网题解: https://leetcode-cn.com/problems/letter-combinations-of-a-phone-number

    56720

    【力扣算法15】之 17. 电话号码的字母组合 python

    问题描述 给定一个仅包含数字 2-9 的字符串,返回所有它能表示的字母组合。答案可以按 任意顺序 返回。 给出数字到字母的映射如下(与电话按键相同)。注意 1 不对应任何字母。...在本问题中,我们需要生成给定数字能表示的所有字母组合,因此可以使用回溯法来生成这些组合。 思路如下: 创建一个字典 digitMap,将每个数字与对应的字母列表进行映射。...然后,我们定义了 generateCombos 递归函数,该函数负责生成所有可能的字母组合。...这样,通过不断地添加字母并递归调用函数,直到达到递归终止条件,就可以生成所有可能的字母组合。...通过回溯法,我们可以生成所有可能的字母组合,解决了给定数字能表示的所有字母组合的问题。

    11510

    组合数学】生成函数 ( 正整数拆分 | 无序 | 有序 | 允许重复 | 不允许重复 | 无序不重复拆分 | 无序重复拆分 )

    文章目录 一、正整数拆分 二、无序拆分 1、无序拆分 不允许重复 2、无序拆分 允许重复 参考博客 : 【组合数学】生成函数 简要介绍 ( 生成函数定义 | 牛顿二项式系数 | 常用的生成函数 | 与常数相关...| 与二项式系数相关 | 与多项式系数相关 ) 【组合数学】生成函数 ( 线性性质 | 乘积性质 ) 【组合数学】生成函数 ( 移位性质 ) 【组合数学】生成函数 ( 求和性质 ) 【组合数学】生成函数...) 【组合数学】生成函数 ( 生成函数应用场景 | 使用生成函数求解递推方程 ) 【组合数学】生成函数 ( 使用生成函数求解多重集 r 组合数 ) 【组合数学】生成函数 ( 使用生成函数求解不定方程解个数...无序不重复 二、无序拆分 ---- 无序拆分基本模型 : 将 正整数 N 无序拆分成正整数 , a_1, a_2, \cdots , a_n 是拆分后的 n 个数 , 该拆分是无序的 ,...】生成函数 ( 使用生成函数求解不定方程解个数 ) 无序拆分的情况下 , 拆分后的正整数 , 允许重复 和 不允许重复 , 是两类组合问题 ; 如果不允许重复 , 那么这些 x_i 的取值 , 只能

    1.6K00

    LeetCode - #17 电话号码的字母组合

    微博:@故胤道长[1])的 Swift 算法题题解整理为文字版以方便大家学习与阅读。...LeetCode 算法到目前我们已经更新了 16 期,我们会保持更新时间和进度(周一、周三、周五早上 9:00 发布),每期的内容不多,我们希望大家可以在上班路上阅读,长久积累会有很大提升。...描述 给定一个仅包含数字 2-9 的字符串,返回所有它能表示的字母组合。答案可以按 任意顺序 返回。 给出数字到字母的映射如下(与电话按键相同)。注意 1 不对应任何字母。 2....numberToStr[currentDigit] } } 主要思想:经典的深度优先搜索,首先创建电话板 时间复杂度:O(4^n), n 表示数字长度 空间复杂度:O(n), n 表示数字长度 该算法题解的仓库

    61210

    leetcode:17 电话号码的字母组合

    return map[str].split('') // 把输入字符串按单字符分隔变成数组,234=>[2,3,4] let num = str.split('') // 保存键盘映射后的字母内容...,获得它所能组成的(((所有的)))字母组合.注意,1什么都没有,1不用算....比如输入的是23,就是2与3进行组合,并且组合成的数组每一个数组的下标是两个字符的。。。。。 例如输入234,那就是先23进行组合组合成的数组又与4进行组合,然后输出的每一个数组1的下标是3个。...思路;先联系好所在的数字锁映射到的字母先. 然后是数字2与数字3运算然后组合,然后组成成的(2 3)新数组与4算,然后又组成新(234)一个数组与5算(这样一来都是两两算。)…就行了....保存键盘映射后的字母内容 然后是下面是进行组合了.

    54630
    领券