Leetcode 17.电话号码的组合(回溯法)
Time: 20191005
Type: Medium
题目描述
给定一个仅包含数字 2-9 的字符串,返回所有它能表示的字母组合。
给出数字到字母的映射如下(与电话按键相同)。注意 1 不对应任何字母。
示例:
输入:“23”
输出:[“ad”, “ae”, “af”, “bd”, “be”, “bf”, “cd”, “ce”, “cf”].
说明:
尽管上面的答案是按字典序排列的,但是你可以任意选择答案输出的顺序。
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/letter-combinations-of-a-phone-number
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
思路
说实话下面的代码我有点不相信自己一下就写对了,除了在index == length
开始写成了index == length - 1
外。
这和排列组合问题很像,除了每个位置的元素选择是要手工打表以外。每个位置可以从多个元素中选择一个,然后进入到下一个位置,下一个位置的元素从另一个可选列表中选择。
这道题我拿到的时候,第一是比较懵的,因为好久没有写回溯的问题了,但是回溯的基本思路是递归来解,既然是递归,就要抓住三个点:
- 递归边界,即终止条件
- 递归体
这里的递归边界条件显然是,当已经选择了length
个元素时,就把结果放到收集器res
中。
站在当前位置考虑当前位置可以选择的元素是一个列表,因此用一个for
循环,在for
循环中递归进入到下一个位置的元素考量。用curStr
来跟踪已经选择好的元素组成的字符串。
这样就可以了。
代码
class Solution:def letterCombinations(self, digits: str) -> List[str]:if len(digits) == 0:return None# print(digits)dic = {}dic['2'] = ['a', 'b', 'c']dic['3'] = ['d', 'e', 'f']dic['4'] = ['g', 'h', 'i']dic['5'] = ['j', 'k', 'l']dic['6'] = ['m', 'n', 'o']dic['7'] = ['p', 'q', 'r', 's']dic['8'] = ['t', 'u', 'v']dic['9'] = ['w', 'x', 'y', 'z']res = []length = len(digits)curStr = ''def recur(res, index, length, curStr):if index == length:# print(curStr)res.append(curStr)return for i in range(len(dic[digits[index]])): recur(res, index + 1, length, curStr + dic[digits[index]][i])recur(res, 0, length, curStr)return res
2019.10 Update:
第一届PAT算法直播课培训班招募帖,欢迎点击查看详情、
END.
Leetcode 17.电话号码的组合(回溯法)相关推荐
- [DFS|回溯法] leetcode 17 电话号码的字母组合
[DFS|回溯法] leetcode 17 电话号码的字母组合 1.题目 题目链接 给定一个仅包含数字 2-9 的字符串,返回所有它能表示的字母组合. 给出数字到字母的映射如下(与电话按键相同).注意 ...
- [LeetCode] 679. 24 Game(回溯法)
传送门 Description You have 4 cards each containing a number from 1 to 9. You need to judge whether the ...
- [LeetCode ] 八皇后问题以及回溯法
对于回溯法,写 backtrack 函数时,需要维护走过的「路径」和当前可以做的「选择列表」,当触发「结束条件」时,将「路径」记入结果集: result=[] def backtrack(路径,选择列 ...
- No.77 组合:回溯法
结果 执行用时 :636 ms, 在所有 cpp 提交中击败了15.29%的用户 内存消耗 :167.7 MB, 在所有 cpp 提交中击败了8.43%的用户 时间消耗和空间消耗有点高,不过在使用回溯 ...
- LeetCode 77 组合 -- 回溯法
来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problems/combinations 题意: 给定两个整数 n 和 k,返回范围 [1, n] 中所有可能的 ...
- LeetCode 17. 电话号码的字母组合(回溯)
文章目录 1. 题目信息 2. 解题 1. 题目信息 给定一个仅包含数字 2-9 的字符串,返回所有它能表示的字母组合. 给出数字到字母的映射如下(与电话按键相同).注意 1 不对应任何字母. 示例: ...
- LeetCode 17电话号码的字母组合(搜索)18四数之和
电话号码的字母组合 题目描述 给定一个仅包含数字 2-9 的字符串,返回所有它能表示的字母组合. 给出数字到字母的映射如下(与电话按键相同).注意 1 不对应任何字母. 示例: 输入:"23 ...
- leetcode 17. 电话号码的字母组合 思考分析
题目 给定一个仅包含数字 2-9 的字符串,返回所有它能表示的字母组合. 给出数字到字母的映射如下(与电话按键相同).注意 1 不对应任何字母. 思考与递归程序 解空间树的宽度是输入数字对应的字符的个 ...
- leetcode —— 17. 电话号码的字母组合
给定一个仅包含数字 2-9 的字符串,返回所有它能表示的字母组合. 给出数字到字母的映射如下(与电话按键相同).注意 1 不对应任何字母. 示例: 输入:"23" 输出:[&quo ...
最新文章
- 云计算或将逐步被认可
- 【计算机网络】数据链路层 : 广域网 ( 广域网概念 | PPP 协议 | PPP 协议功能 | PPP 协议组成 | PPP 协议帧格式 )
- python 修改文件名_Python 批量修改文件名
- 调用face++平台api进行人脸识别
- 只看不说-CCTV的客户端关键字
- jpetstore开发实战--(1)
- 腾讯 Tars-Go 服务获取自定义模版(配置)值
- linux 环境变量和shell变量
- Failed to initialize storage module: user 的解决方式
- linux下安装asio4ks,FL Studio 第一步 初始化 2020-10-01
- ffmpeg命令操作 合并视频 取图片帧数 获取音频
- 【已解决】docker overlay2占用大量磁盘空间处理方法
- 基于单片机GPS定位语音智能盲人拐杖设计(毕设课设)
- Vijos P1794 文化之旅
- mysql replication slave_MySQL Replication,主从同步( Master-Slave)
- 秒杀springboot——未来轻量级高性能的Java云原生微服务框架来啦
- 谷歌浏览器如何设置和恢复纯黑界面
- 对于成功至关重要:商界领袖们是怎样阅读的?
- 针对文字图片使用pillow对图片进行操作并判断图片相似度
- android 阿里大鱼短信接口,详解dedecms使用整合阿里大鱼短信接口进行短信发送的教程...
热门文章
- Ubuntu学习日记--Lesson1:Linux基础和常用命令
- bios uefi legacy_安装win10用uefi还是legacy?win10 uefi引导修复教程
- mac python安装pyqt5_pyqt5 mac os 安装
- 实际参数列表和形式参数列表长度不同_Dynamo参数化轴网,这些对你很有帮助
- 计算机无法进系统咋办,详解电脑无法进入系统怎么办
- 排序算法python实现_用Python,Java和C / C ++实现的选择排序算法
- python多线程守护线程_Python守护程序线程
- 动态编程语言静态编程语言_什么是动态编程?
- 高级开发进阶到架构师的必要条件是什么?
- 开课吧:什么是包?如何定义包?