LeetCode【17】电话号码的字母组合

题目:

思路:

参考:https://blog.csdn.net/weixin_46429290/article/details/121888154

和上一个题《子集》的思路一样,先画出树结构,看树的深度(遍历层级),树的宽度(横向节点)分别是什么,然后套用模板,这题自然成型。

代码:

java 复制代码
private List<String> result = new ArrayList<>();
private StringBuilder path = new StringBuilder();

private Map<Character, String> phoneMap = new HashMap<>() {{
    put('2', "abc");
    put('3', "def");
    put('4', "ghi");
    put('5', "jkl");
    put('6', "mno");
    put('7', "pqrs");
    put('8', "tuv");
    put('9', "wxyz");
}};

// 思考递归参数
// 思考递归终止条件
// 思考递归函数
public List<String> letterCombinations(String digits) {
    if (digits.length() == 0) {
        return result;
    }

    backTracking(digits, 0);
    return result;
}

public void backTracking(String digits, int startIndex) {
    if (startIndex == digits.length()) {
        result.add(path.toString());
    } else {     // 注意,只有没遍历到树的最后一层,才需要递归的遍历;
        String str = phoneMap.get(digits.charAt(startIndex));
        for (int i = 0; i < str.length(); i++) {    // 注意这里的起始点为0,横向遍历为abc,每个元素
            path.append(str.charAt(i));
            backTracking(digits, startIndex + 1);
            path.deleteCharAt(startIndex);  // 这里要回溯的树的深度,深度为startIndex
        }
    }
}
相关推荐
地平线开发者13 小时前
SparseDrive 模型导出与性能优化实战
算法·自动驾驶
董董灿是个攻城狮14 小时前
大模型连载2:初步认识 tokenizer 的过程
算法
地平线开发者14 小时前
地平线 VP 接口工程实践(一):hbVPRoiResize 接口功能、使用约束与典型问题总结
算法·自动驾驶
罗西的思考14 小时前
AI Agent框架探秘:拆解 OpenHands(10)--- Runtime
人工智能·算法·机器学习
HXhlx17 小时前
CART决策树基本原理
算法·机器学习
Wect18 小时前
LeetCode 210. 课程表 II 题解:Kahn算法+DFS 双解法精讲
前端·算法·typescript
颜酱19 小时前
单调队列:滑动窗口极值问题的最优解(通用模板版)
javascript·后端·算法
Gorway1 天前
解析残差网络 (ResNet)
算法
拖拉斯旋风1 天前
LeetCode 经典算法题解析:优先队列与广度优先搜索的巧妙应用
算法
Wect1 天前
LeetCode 207. 课程表:两种解法(BFS+DFS)详细解析
前端·算法·typescript