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.电话号码的组合(回溯法)相关推荐

  1. [DFS|回溯法] leetcode 17 电话号码的字母组合

    [DFS|回溯法] leetcode 17 电话号码的字母组合 1.题目 题目链接 给定一个仅包含数字 2-9 的字符串,返回所有它能表示的字母组合. 给出数字到字母的映射如下(与电话按键相同).注意 ...

  2. [LeetCode] 679. 24 Game(回溯法)

    传送门 Description You have 4 cards each containing a number from 1 to 9. You need to judge whether the ...

  3. [LeetCode ] 八皇后问题以及回溯法

    对于回溯法,写 backtrack 函数时,需要维护走过的「路径」和当前可以做的「选择列表」,当触发「结束条件」时,将「路径」记入结果集: result=[] def backtrack(路径,选择列 ...

  4. No.77 组合:回溯法

    结果 执行用时 :636 ms, 在所有 cpp 提交中击败了15.29%的用户 内存消耗 :167.7 MB, 在所有 cpp 提交中击败了8.43%的用户 时间消耗和空间消耗有点高,不过在使用回溯 ...

  5. LeetCode 77 组合 -- 回溯法

    来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problems/combinations 题意: 给定两个整数 n 和 k,返回范围 [1, n] 中所有可能的 ...

  6. LeetCode 17. 电话号码的字母组合(回溯)

    文章目录 1. 题目信息 2. 解题 1. 题目信息 给定一个仅包含数字 2-9 的字符串,返回所有它能表示的字母组合. 给出数字到字母的映射如下(与电话按键相同).注意 1 不对应任何字母. 示例: ...

  7. LeetCode 17电话号码的字母组合(搜索)18四数之和

    电话号码的字母组合 题目描述 给定一个仅包含数字 2-9 的字符串,返回所有它能表示的字母组合. 给出数字到字母的映射如下(与电话按键相同).注意 1 不对应任何字母. 示例: 输入:"23 ...

  8. leetcode 17. 电话号码的字母组合 思考分析

    题目 给定一个仅包含数字 2-9 的字符串,返回所有它能表示的字母组合. 给出数字到字母的映射如下(与电话按键相同).注意 1 不对应任何字母. 思考与递归程序 解空间树的宽度是输入数字对应的字符的个 ...

  9. leetcode —— 17. 电话号码的字母组合

    给定一个仅包含数字 2-9 的字符串,返回所有它能表示的字母组合. 给出数字到字母的映射如下(与电话按键相同).注意 1 不对应任何字母. 示例: 输入:"23" 输出:[&quo ...

最新文章

  1. 云计算或将逐步被认可
  2. 【计算机网络】数据链路层 : 广域网 ( 广域网概念 | PPP 协议 | PPP 协议功能 | PPP 协议组成 | PPP 协议帧格式 )
  3. python 修改文件名_Python 批量修改文件名
  4. 调用face++平台api进行人脸识别
  5. 只看不说-CCTV的客户端关键字
  6. jpetstore开发实战--(1)
  7. 腾讯 Tars-Go 服务获取自定义模版(配置)值
  8. linux 环境变量和shell变量
  9. Failed to initialize storage module: user 的解决方式
  10. linux下安装asio4ks,FL Studio 第一步 初始化 2020-10-01
  11. ffmpeg命令操作 合并视频 取图片帧数 获取音频
  12. 【已解决】docker overlay2占用大量磁盘空间处理方法
  13. 基于单片机GPS定位语音智能盲人拐杖设计(毕设课设)
  14. Vijos P1794 文化之旅
  15. mysql replication slave_MySQL Replication,主从同步( Master-Slave)
  16. 秒杀springboot——未来轻量级高性能的Java云原生微服务框架来啦
  17. 谷歌浏览器如何设置和恢复纯黑界面
  18. 对于成功至关重要:商界领袖们是怎样阅读的?
  19. 针对文字图片使用pillow对图片进行操作并判断图片相似度
  20. android 阿里大鱼短信接口,详解dedecms使用整合阿里大鱼短信接口进行短信发送的教程...

热门文章

  1. Ubuntu学习日记--Lesson1:Linux基础和常用命令
  2. bios uefi legacy_安装win10用uefi还是legacy?win10 uefi引导修复教程
  3. mac python安装pyqt5_pyqt5 mac os 安装
  4. 实际参数列表和形式参数列表长度不同_Dynamo参数化轴网,这些对你很有帮助
  5. 计算机无法进系统咋办,详解电脑无法进入系统怎么办
  6. 排序算法python实现_用Python,Java和C / C ++实现的选择排序算法
  7. python多线程守护线程_Python守护程序线程
  8. 动态编程语言静态编程语言_什么是动态编程?
  9. 高级开发进阶到架构师的必要条件是什么?
  10. 开课吧:什么是包?如何定义包?