leetcode-电话号码的字母组合

给定一个仅包含数字 2-9 的字符串,返回所有它能表示的字母组合。答案可以按 任意顺序 返回。

给出数字到字母的映射如下(与电话按键相同)。注意 1 不对应任何字母。

示例 1:

输入:digits = "23"

输出:["ad","ae","af","bd","be","bf","cd","ce","cf"]

示例 2:

输入:digits = "2"

输出:["a","b","c"]

提示:

1 <= digits.length <= 4

digits[i] 是范围 ['2', '9'] 的一个数字。

思路 :考虑两点。第一点,当前数字考虑后是否还会被考虑?第二点,遍历的位置?第一点,当前数字对应字母情况考虑后,不会再被考虑。第二点,每次考虑当前数字即可。

综上,dfs中使用index考虑当前数字的情况,下一个数字的情况用index+1考虑。
代码

c 复制代码
class Solution {
    Map<Integer,String> phoneKey = new HashMap<>();
    public List<String> letterCombinations(String digits) {
        phoneKey.put(2,"abc");
        phoneKey.put(3,"def");
        phoneKey.put(4,"ghi");
        phoneKey.put(5,"jkl");
        phoneKey.put(6,"mno");
        phoneKey.put(7,"pqrs");
        phoneKey.put(8,"tuv");
        phoneKey.put(9,"wxyz");
        List<String> res = new ArrayList<>();
        dfs(digits, 0, "", res);
        return res;

    }

    public void dfs(String digits, int index, String temp, List<String> res){
        if(index==digits.length()){
            res.add(temp);
            return;
        }
		// 当前数字可以表示的字母情况
        String s = phoneKey.getOrDefault(Integer.parseInt(String.valueOf(digits.charAt(index))),"");
        for(int i = 0;i<s.length();i++){
            dfs(digits, index+1,temp+s.charAt(i),res);
        }
    }
}
相关推荐
逻辑驱动的ken1 分钟前
Java高频面试考点场景题16
java·开发语言·面试·职场和发展·求职招聘
数据牧羊人的成长笔记6 分钟前
SVM与朴素贝叶斯算法+Kaggle竞赛+智能推荐系统+关联规则分析与Apriori算法+Gensim与LDA主题模型
算法·机器学习·支持向量机
拳里剑气10 分钟前
C++算法:前缀和
开发语言·c++·算法·前缀和
隔壁大炮16 分钟前
Day07-词嵌入层解释
人工智能·深度学习·算法·计算机视觉·cnn
啊我不会诶19 分钟前
Codeforces Round 1091 (Div. 2) and CodeCraft 26
c++·算法
凌波粒21 分钟前
LeetCode--二叉树前中后序遍历的递归与迭代实现(二叉树/DFS)
算法·leetcode·深度优先
啊哦呃咦唔鱼23 分钟前
Leetcodehot100-215. 数组中的第K个最大元素
数据结构·算法·leetcode
老赵聊算法、大模型备案28 分钟前
从剪映、即梦 AI 被罚,读懂 AI 生成内容标识硬性合规要求
人工智能·算法·安全·aigc
shehuiyuelaiyuehao38 分钟前
算法12,滑动窗口,将x减到0的最小操作数
java·数据结构·算法
6Hzlia40 分钟前
【Hot 100 刷题计划】 LeetCode 19. 删除链表的倒数第 N 个结点 | C++ 双指针单趟遍历
c++·leetcode·链表