LeetCode第17题 电话号码的字母组合
程序员文章站
2022-06-05 17:13:49
...
问题描述
给定一个仅包含数字 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
解题思路
这题就是找出所有组合方式;只是由于给出的字符串可能很长,所以不方便使用多重循环。可以使用递归的方式进行深搜回溯,在深搜之前先建立数字与字符串的对应表,可以使用hashmap也可以使用数组;使用数组更快。深搜时找出数字对应的字符串进行尝试即可。
代码实现:
import java.util.ArrayList;
import java.util.List;
public class text1 {
ArrayList<String> list = new ArrayList<String>();
String[] map = {" ","*","abc","def","ghi","jkl","mno","pqrs","tuv","wxyz"};
public List<String> letterCombinations(String digits) {
if(digits==null || digits.length()==0) {
return list;
}
dfs(digits, "", 0);
return list;
}
private void dfs(String digits, String letter, int index) {
if(index==digits.length()) { //递归出口
list.add(letter);
return ;
}
char c = digits.charAt(index);
int pos = c - '0'; //下标
String str = map[pos];
for(int i=0; i<str.length(); i++) {
dfs(digits, letter+str.charAt(i), index+1);
}
}
}
提交结果:
推荐阅读
-
#leetcode刷题之路17-电话号码的字母组合
-
#leetcode刷题之路19-删除链表的倒数第N个节点
-
[Leetcode][第410题][JAVA][分割数组的最大值][动态规划][二分]
-
leetcode 第907题 子数组的最小值之和 python解法
-
LeetCode第958题 二叉树的完全性检验
-
leetcode 第 958 题:二叉树的完全性检验(C++)
-
leetcode hot100------17.电话号码的字母组合
-
LeetCode刷题记录——第122题(买卖股票的最佳时机二)
-
17、电话号码的字母组合
-
LeetCode第448题找到所有数组中消失的数字(Python)