LeetCode17电话号码的字母组合

2024-06-02 20:52

本文主要是介绍LeetCode17电话号码的字母组合,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

题目描述

  给定一个仅包含数字 2-9 的字符串,返回所有它能表示的字母组合。答案可以按 任意顺序 返回。
给出数字到字母的映射如下(与电话按键相同)。注意 1 不对应任何字母。

解析

  广度优先遍历或者深度优先遍历两种方式,广度优先类似构造一颗树形结构,子树就是当前节点加下一层数字对应的字母。

public List<String> letterCombinations(String digits) {List<String> res = new ArrayList<>();if (digits == null || digits.length() == 0) {return res;}Map<Character, String> phoneMap = 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");}};Queue<String> queue = new ArrayDeque<>();queue.offer("");for (int i = 0; i < digits.length(); i++) {char curDigit = digits.charAt(i);String curString = phoneMap.get(curDigit);int size = queue.size();for (int j = 0; j < size; j++) {String parentStr = queue.poll();for (int k = 0; k < curString.length(); k++) {queue.offer(parentStr + curString.charAt(k));}}}while (!queue.isEmpty()) {res.add(queue.poll());}return res;}

  深度优先遍历利用递归操作,使用一个变量去记录当前字符串的长度,达到长度后则放入结果数组中,使用字符数组可以直接覆盖回溯。

public static List<String> letterCombinations(String digits) {List<String> res = new ArrayList<>();if (digits == null || digits.length() == 0) {return res;}Map<Character, String> phoneMap = 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");}};char[] current = new char[digits.length()];backtrack(res, phoneMap, digits, 0, current);return res;}private static void backtrack(List<String> res, Map<Character, String> phoneMap, String digits, int index, char[] current) {if (index == digits.length()) {res.add(new String(current));return;}char digit = digits.charAt(index);String letters = phoneMap.get(digit);for (int i = 0; i < letters.length(); i++) {current[index] = letters.charAt(i);backtrack(res, phoneMap, digits, index + 1, current);}}

在这里插入图片描述

这篇关于LeetCode17电话号码的字母组合的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1025064

相关文章

第十七题:电话号码的字母组合

题目描述 给定一个仅包含数字 2-9 的字符串,返回所有可能的由它组成的字母组合。你可以假设输入字符串至少包含一个数字,并且不超过3位数字。 实现思路 使用哈希表或数组存储每个数字对应的字符,然后通过递归或迭代的方式生成所有可能的组合。如果字符串长度为n,则可以看作是n层循环,每层循环可以选择对应数字的所有字符之一。 算法实现 C语言实现 #include <stdio.h>#inc

代码随想录算法训练营第十九天| 回溯理论、77. 组合、216. 组合总和Ⅲ、17. 电话号码的字母组合

今日内容 回溯的理论基础leetcode. 77 组合leetcode. 216 组合总和Ⅲleetcode. 17 电话号码的字母组合 回溯理论基础 回溯法也叫回溯搜索法,它是一种搜索的方式,而且只要有递归就会有回溯,回溯就是递归的副产品。 回溯说到底并不是什么非常高深的搜索方式,本质上仍然是穷举,穷举所有可能然后选择出我们要的答案。剪枝会使回溯法更加高效一点,但改变不了回溯本质就是穷举

android根据电话号码查询联系人名称,导出通讯录所有联系人的方法

/**      * 根据电话号码取得联系人姓名      */     public static String getContactNameByPhoneNumber(Context context, String address) {         String[] projection = { ContactsContract.PhoneLookup.DISPLAY_NA

算法打卡 Day28(回溯算法)-组合总数 + 组合总数 Ⅱ+ 电话号码的字母组合

文章目录 Leetcode 17-电话号码的字母组合题目描述解题思路 Leetcode 39-组合总数题目描述解题思路 Leetcode 216-组合总数 Ⅲ题目描述解题思路 Leetcode 17-电话号码的字母组合 题目描述 https://leetcode.cn/problems/letter-combinations-of-a-phone-number/descrip

LintCode 电话号码的字母组合

Given a digit string excluded 01, 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. 样例 给定 “

POJ1002电话号码字符串

题目意思: 输入一个串,里面包含一些数字和一些大写字母,以及 - ,字母变换成数字,保证了7个数字,输出重复出现超多1次的电话号码以及次数。规模1e5。 粽子,被这个题目坑了很久,首先是用字符串保存最后的电话号码,二维sort好像不能用,但是string可以用sort,一直wa,今天发现了两个错误,一个是最后扫描个数的时候,会漏掉最后面的一个号码,调整过来又wa了,因为如果只有一组数据,输出了

回溯——3.电话号码的字母组合

力扣题目链接 给定一个仅包含数字 2-9 的字符串,返回所有它能表示的字母组合。给出数字到字母的映射如下(与电话按键相同)。注意 1 不对应任何字母。 输入:"23"输出:["ad", "ae", "af", "bd", "be", "bf", "cd", "ce", "cf"]. 解题思路总结: 映射表建立: 通过letterMap将数字0-9与对应的字母集合关联起来。递归生成组合: 使

Leetcode 17. 电话号码的字母组合 C++实现

Leetcode 17. 电话号码的字母组合 问题:给定一个仅包含数字 2-9 的字符串,返回所有它能表示的字母组合。答案可以按 任意顺序 返回。给出数字到字母的映射如下(与电话按键相同)。注意 1 不对应任何字母。 算法:递归嵌套,先获取 digits 长度 n ,如果为 0 则直接返回空数组。创建 path 数组,path 数组的单个位置的长度由 digits 长度 n 来决定,有

刷题之电话号码的字母组合(leetcode)

电话号码的字母组合 在这里插入图片描述 回溯实现,但是需要练习一下C语言写法: class Solution {private:string phone[8]={"abc","def","ghi","jkl","mno","pqrs","tuv","wxyz"};vector<string>result;string path;void backtracking(string s,int s

192.回溯算法:电话号码的字母组合(力扣)

代码解决 class Solution {public:// 定义每个数字对应的字母映射const string letterMap[10] = {"", // 0"", // 1"abc", // 2"def", // 3"ghi", // 4"jkl", // 5"mno", // 6"pqrs", // 7"tuv", // 8"wxyz" // 9}