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);
        }
    }
}
相关推荐
Fcy6487 小时前
算法基础详解(三)前缀和与差分算法
算法·前缀和·差分
kvo7f2JTy7 小时前
基于机器学习算法的web入侵检测系统设计与实现
前端·算法·机器学习
List<String> error_P7 小时前
蓝桥杯最后几天冲刺:暴力大法(一)
算法·职场和发展·蓝桥杯
迈巴赫车主8 小时前
蓝桥杯3500阶乘求和java
java·开发语言·数据结构·职场和发展·蓝桥杯
流云鹤8 小时前
Codeforces Round 1090 (Div. 4)
c++·算法
wljy19 小时前
第十三届蓝桥杯大赛软件赛省赛C/C++ 大学 B 组(个人见解,已完结)
c语言·c++·算法·蓝桥杯·stl
清空mega9 小时前
C++中关于数学的一些语法回忆(2)
开发语言·c++·算法
香蕉鼠片10 小时前
数据结构八股(一)
数据结构·算法
Mr_Xuhhh10 小时前
从理论到实践:深入理解算法的时间与空间复杂度
java·开发语言·算法
6Hzlia10 小时前
【Hot 100 刷题计划】 LeetCode 42. 接雨水 | C++ 动态规划与双指针题解
c++·算法·leetcode