题目

地址:
https://leetcode.com/problems/letter-combinations-of-a-phone-number/

描述:
Given a string containing digits from 2-9 inclusive, return all possible letter combinations that the number could represent.

A mapping of digit to letters (just like on the telephone buttons) is given below. Note that 1 does not map to any letters.

Example:

Input: "23"
Output: ["ad", "ae", "af", "bd", "be", "bf", "cd", "ce", "cf"].

Note:

Although the above answer is in lexicographical order, your answer could be in any order you want.

此题目用回溯解法,遍历数组所有解,注意递归的退出条件。

遍历解法

顺序执行分解:

  1. 初始化二维数组char[][] map, 存储数字以及字母的关系,map[digit - '2'] 获取字母数组。
  2. 遍历上一次的字符串List,遍历并拼接新的字符(字符从遍历字符数组所得)。
public List<String> letterCombinationWithIterate(String digits) {List<String> result = new ArrayList<>();if (digits == null || digits.length() == 0) {return result;}char[][] map = new char[8][];map[0] = "abc".toCharArray();map[1] = "def".toCharArray();map[2] = "ghi".toCharArray();map[3] = "jkl".toCharArray();map[4] = "mno".toCharArray();map[5] = "pqrs".toCharArray();map[6] = "tuv".toCharArray();map[7] = "wxyz".toCharArray();result.add("");for (char digit: digits.toCharArray()) {result = append(result, map[digit - '2']);}System.out.println("result > " + Arrays.toString(result.toArray()));return result;}private List<String> append(List<String> lastList, char[] charArray) {List<String>  nextList = new ArrayList<>();for (String s: lastList) {for (char c: charArray) {nextList.add(s + c);}}return nextList;}

回溯解法

回溯分解:

  1. 回溯出口为nextDigits == null || nextDigits.length() == 0
  2. combination为累计拼接的结果
Map<Character, String> phone = new HashMap<Character, String>() {{put('2', "abc");put('3', "def");put('4', "ghi");put('5', "jkl");put('6', "mno");put('7', "pqrs");put('8', "tuv");put('9', "wxyz");}};private List<String> resultList = new ArrayList<>();public List<String> letterCombinationsWithBacktrack(String digits) {if (digits == null || digits.length() == 0) {return resultList;}backTrack("", digits);return resultList;}public void backTrack(String combination, String nextDigits) {if (nextDigits == null || nextDigits.length() == 0) {resultList.add(combination);return;}char c = nextDigits.charAt(0);for (char item: phone.get(c).toCharArray()) {backTrack(combination + item, nextDigits.substring(1));}}

代码下载

https://github.com/zgpeace/awesome-java-leetcode/blob/master/code/LeetCode/src/backtracking/LetterCombinationsOfAPhoneNumber.java

算法:回溯一 电话拨号数字里面的字母组合 letter-combinations-of-a-phone-number相关推荐

  1. [ LeetCode ] #17. Letter Combinations of a Phone Number(电话按键组合字符 C++ Python)

    题目:17. Letter Combinations of a Phone Number Difficulty: Medium Given a string containing digits fro ...

  2. 练习:电话拨号键盘的字母组合(一个缩进给我惹了麻烦)

    我的CSDN主页 My Python 学习个人备忘录    练习:给定不大于4位的数字(2-9),输出所有的键面字母电话拨号键盘键面字母组合. 题目 代码运行效果 完整代码 一个缩进的麻烦 正整数注释 ...

  3. 小米手机因为默认权限设置电话拨号,短信等广播无法使用的解决办法

    今天早上写一个拦截电话拨号的广播,在写完代码后运行测试.开启应用后拨打电话(程序中默认为接收到1500这个拨号数字后启动Activity).可是在我的红米手机上运行后,Logcat一点反应都没有,电话 ...

  4. android 拨号器 目录,Android 电话拨号器

    安卓系统一般自带有:电话,邮件,浏览器功能: 本文章简单,讲解电话自带的电话拨号功能进行,电话拨号. 电话拨号器的:逻辑很简单 首先获取输入的电话号码 然后在点击按钮的时候,发送一个隐式的Intent ...

  5. 【Matlab通信】DTMF双音多频电话拨号仿真【含GUI源码 805期】

    一.代码运行视频(哔哩哔哩) [Matlab通信]DTMF双音多频电话拨号仿真[含GUI源码 805期] 二.matlab版本及参考文献 1 matlab版本 2014a 2 参考文献 [1] 蔡利梅 ...

  6. 89c51电话按键c语言代码,基于AT89C51单片机电话拨号系统设计.docx

    基于AT89C51单片机电话拨号系统设计 兰州工业学院毕业设计(论文)题目基于AT89C51单片机的电话拨号系统的设计学院电子信息工程学院专业电子信息工程技术班级嵌入式1 1 姓名学号指导教师(职称) ...

  7. [Android]电话拨号器

    继续今天的Android,经过昨天大体了解了Android开发的一些基本文件结构,今天来做一个电话拨号器! 预期达到的效果 实现过程 首先还是按照昨天第一篇教程,新建一个项目叫PhoneCall的An ...

  8. 电话拨号防盗报警器系统设计

    目录 文章目录 前言 一.硬件系统方案设计 1.系统构成设计 二.系统的软件设计 1.工作过程 2.拨号报警器功能调试 总结 前言 随着人们生活水平的不断提高,大家对住宅和办公室的安全意识也日益增加. ...

  9. Android学习——实现简单的电话拨号

    Android学习--实现简单的电话拨号 新建工程 1.编辑界面 2.编辑MainActivity 3.编辑权限 新建工程 1.编辑界面 设置为线性布局.输入框提示(输入类型为数字).添加图片按钮 & ...

  10. Android入门——电话拨号器和4种点击事件

    关于HelloWorld为,电话拨号程序还AndroidA入门demo,从这个样例我们要理清楚做安卓项目的思路. 大体分为三步: 1.理解需求,理清思路 2.设计UI 3.代码实现 电话拨号器 1.  ...

最新文章

  1. 2022-2028年中国床上用品行业投资分析及前景预测报告
  2. SpringMVC上传文件解析request请求为空获取不到数据问题
  3. Android 源码编译及常见错误及解决方法
  4. Error:Unable to tunnel through proxy. Proxy returns HTTP/1.1 400 Bad Request
  5. ITK:使用Deformation Field扭曲图像
  6. redis常用命令_Redis的简介以及基本常用命令
  7. LeetCode 1696. 跳跃游戏 VI(优先队列 / 单调队列)
  8. 博主推荐【文件Hash校验工具V1.0 -免费版】
  9. Springboot07配制数据统一返回格式以及定义统一的异常处理类
  10. Dubbo(六)使用SpringBoot搭建dubbo服务提供者工程
  11. Mac新手技巧,如何使用 Safari 浏览器?
  12. html5中audio支持音频格式
  13. RINEX3.05格式中的主要更新
  14. Arch-004ArchLinux搜狗输入法安装
  15. CVE-2017-8464 震网三代
  16. ubuntu18.04安装nvidia驱动(戴尔G15_3060版本)
  17. Burpsuite1.7.03网站渗透神器最新破解版
  18. 【Opencontrail】对接k8s基本原理
  19. 40000字 Matplotlib 实操干货,真的全!
  20. 关于《机器学习决策树导出图片、PDF支持中文》解决办法

热门文章

  1. mysql建立索引_MySQL 索引及优化实战(一)
  2. c语言不能调用strcat连接两个字符串_C语言中常用的6个字符串处理函数
  3. mysql迁移到mysqli_php – 从mysql连接迁移到mysqli
  4. oracle 11g给表建触发器错误“索引中丢失 IN 或 OUT 参数:: 1
  5. eclispe file查找
  6. objective-c中@autoreleasepool的用法
  7. .NET 2.0 的压缩功能
  8. oracle dnfs 配置,配置 Oracle Direct NFS (dNFS)
  9. Java写入磁盘阵列_什么是RAID?RAID有什么用?RAID原理
  10. ogg oracle 测试kafka_云MSP技本功|基于OGG 实现Oracle到Kafka增量数据实时同步