【leetcode】电话号码的字母组合
题目:
给定一个仅包含数字 2-9
的字符串,返回所有它能表示的字母组合。
给出数字到字母的映射如下(与电话按键相同)。注意 1 不对应任何字母。
示例:
输入:"23" 输出:["ad", "ae", "af", "bd", "be", "bf", "cd", "ce", "cf"].
说明:
尽管上面的答案是按字典序排列的,但是你可以任意选择答案输出的顺序。
解法一:迭代法
将原数组中的值加上当前值得可能性进行组合,
比如第一个数字2,对应的就是abc,这时 候数组中的值就是[a,b,c]
轮到下一个数字3,对应的是def,就把a拼上d/e/f,b拼上d/e/f,c拼上d/e/f, 返回数组
java代码:
class Solution {public List<String> letterCombinations(String digits) {HashMap<Character, String[]> map = new HashMap<>();map.put('2', new String[]{"a", "b", "c"});map.put('3', new String[]{"d", "e", "f"});map.put('4', new String[]{"g", "h", "i"});map.put('5', new String[]{"j", "k", "l"});map.put('6', new String[]{"m", "n", "o"});map.put('7', new String[]{"p", "q", "r", "s"});map.put('8', new String[]{"t", "u", "v"});map.put('9', new String[]{"w", "x", "y", "z"});int len = digits.length();List<String> res = new ArrayList<>();for (int i = 0; i < len; i++) {String[] tmp = map.get(digits.charAt(i));List<String> listTmp = new ArrayList<>();if (i == 0) {for (String s : tmp) {res.add(s);}} else {for (int j = 0; j < res.size(); j++) {for (String s : tmp) {listTmp.add(res.get(j) + s);}}res = listTmp;}}return res;}
}
解法二:回溯法
把每个数字字符当作递归的一层,每一层中先枚举一个字母,
递归进入下一层,再删除这个字母,回到上一个状态,枚举下一个字母。
递归结束标志是递归了digits.length层,即字母组合长度等于digits长度,
递归结束得到一个符合的字母组合,加入list。等于是在循环中套递归
java代码:
class Solution {public List<String> letterCombinations(String digits) {Map<Character, String[]> map = new HashMap<>();map.put('2', new String[]{"a", "b", "c"});map.put('3', new String[]{"d", "e", "f"});map.put('4', new String[]{"g", "h", "i"});map.put('5', new String[]{"j", "k", "l"});map.put('6', new String[]{"m", "n", "o"});map.put('7', new String[]{"p", "q", "r", "s"});map.put('8', new String[]{"t", "u", "v"});map.put('9', new String[]{"w", "x", "y", "z"});int len = digits.length();List<String> res = new ArrayList<>();if (len == 0) {return res;}String oneRes = "";combi(digits, 0, res, oneRes, map);return res;}private void combi(String digits, int i, List<String> res, String oneRes, Map<Character, String[]> map) {if (i == digits.length()) {res.add(oneRes);return;}String[] tmp = map.get(digits.charAt(i));for (String s : tmp) {oneRes += s; //把这个字母加入oneRescombi(digits, i + 1, res, oneRes, map);oneRes = oneRes.substring(0, oneRes.length() - 1);//把s从oneRes中删除(这个如果不好理解,可以举个例子23,在纸上走一遍)}}
}
由于水平有限,博客中难免会有一些错误,有纰漏之处恳请各位大佬不吝赐教!
推荐阅读:
【leetcode-动态规划】爬楼梯 - CSDN博客
【leetcode-动态规划】买卖股票的最佳时机 - CSDN博客
【leetcode-动态规划】最大子序和
【leetcode-动态规划】 不同路径 - CSDN博客
【leetcode-动态规划】打家劫舍
【leetcode-动态规划】 跳跃游戏 - CSDN博客
【leetcode-动态规划】零钱兑换 - CSDN博客
【leetcode】电话号码的字母组合相关推荐
- Leetcode 电话号码的字母组合
电话号码的字母组合 题目描述: 给定一个仅包含数字 2-9 的字符串,返回所有它能表示的字母组合.给出数字到字母的映射如下(与电话按键相同).注意 1 不对应任何字母 题目链接 class Solut ...
- 树:BFS,DFS解Leetcode电话号码的字母组合问题
问题描述: 题目:Leetcode 第17题 难度:中等 给定一个仅包含数字 2-9 的字符串,返回所有它能表示的字母组合.答案可以按 任意顺序 返回. 给出数字到字母的映射如下(与电话按键相同).注 ...
- leetcode:电话号码的字母组合--java,dfs
给定一个仅包含数字 2-9 的字符串,返回所有它能表示的字母组合. 给出数字到字母的映射如下(与电话按键相同).注意 1 不对应任何字母. 示例: 输入:"23" 输出:[&quo ...
- 《LeetCode力扣练习》第17题 电话号码的字母组合 Java
<LeetCode力扣练习>第17题 电话号码的字母组合 Java 一.资源 题目: 给定一个仅包含数字 2-9 的字符串,返回所有它能表示的字母组合.答案可以按 任意顺序 返回. 给出数 ...
- LeetCode 17电话号码的字母组合(搜索)18四数之和
电话号码的字母组合 题目描述 给定一个仅包含数字 2-9 的字符串,返回所有它能表示的字母组合. 给出数字到字母的映射如下(与电话按键相同).注意 1 不对应任何字母. 示例: 输入:"23 ...
- [Leetcode][第17题][JAVA][电话号码的字母组合][回溯]
[问题描述][中等] [解答思路] 用哈希表/数组存储每个数字对应的所有可能的字母,然后进行回溯操作. 回溯过程中维护一个字符串,表示已有的字母排列(如果未遍历完电话号码的所有数字,则已有的字母排列是 ...
- 【LeetCode】【HOT】17. 电话号码的字母组合(递归)
[LeetCode][HOT]17. 电话号码的字母组合 文章目录 [LeetCode][HOT]17. 电话号码的字母组合 package hot;import java.util.ArrayLis ...
- [DFS|回溯法] leetcode 17 电话号码的字母组合
[DFS|回溯法] leetcode 17 电话号码的字母组合 1.题目 题目链接 给定一个仅包含数字 2-9 的字符串,返回所有它能表示的字母组合. 给出数字到字母的映射如下(与电话按键相同).注意 ...
- Day25 LeetCode 216. 组合总和 III 17. 电话号码的字母组合
题目:216. 组合总和 III - 力扣(LeetCode) 思路: 1.递归函数参数和返回值:首先需要两个全局变量一维path数组和二维result数组,path数组用来收集路径上的元素,resu ...
- LeetCode | 0017. Letter Combinations of a Phone Number电话号码的字母组合【Python】
LeetCode 0017. Letter Combinations of a Phone Number电话号码的字母组合[Medium][Python][回溯][DFS][暴力] Problem L ...
最新文章
- php redis search,php redis类
- 一种电子病历系统软件框架思想
- UIAlertview改变按钮位置 大小
- 【Paper】2017_The distributed optimal consensus algorithms for general linear multi-agent systems
- 杜克大学计算机科学专业,杜克大学计算机科学专业研究生留学申请条件高不高?...
- 抛硬币直到连续若干次正面
- java提高篇之详解内部类
- 怎样快速画出一个正方体_小学数学非常有效的“画图”解题法,快速解题的“金钥匙”...
- python批量图片转pdf,用python 制作图片转pdf工具
- winform窗体对象 单例模式与泛型结合
- 群发的我不回??!!
- Java并发(9)- 从同步容器到并发容器
- Ubuntu18.04安装Android Studio
- smarty 模板不能正常加载css,js的问题
- Linux之 find之 ctime,atime,mtime
- Segmentree beats!---吉如一线段树学习笔记
- 三国古城和108将地图已恢复
- 网页播放Flash视频尝试的三种方式
- 鸿蒙申请入口联系人邮箱格式不对,为什么appid输入邮箱地址不对
- batch批处理文件(一)——batch概念以及echo off