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
        }
    }
}
相关推荐
小孟Java攻城狮4 小时前
leetcode-不同路径问题
算法·leetcode·职场和发展
查理零世4 小时前
算法竞赛之差分进阶——等差数列差分 python
python·算法·差分
小猿_007 小时前
C语言程序设计十大排序—插入排序
c语言·算法·排序算法
熊文豪9 小时前
深入解析人工智能中的协同过滤算法及其在推荐系统中的应用与优化
人工智能·算法
siy233311 小时前
[c语言日寄]结构体的使用及其拓展
c语言·开发语言·笔记·学习·算法
吴秋霖11 小时前
最新百应abogus纯算还原流程分析
算法·abogus
灶龙12 小时前
浅谈 PID 控制算法
c++·算法
菜还不练就废了12 小时前
蓝桥杯算法日常|c\c++常用竞赛函数总结备用
c++·算法·蓝桥杯
金色旭光12 小时前
目标检测高频评价指标的计算过程
算法·yolo
he1010112 小时前
1/20赛后总结
算法·深度优先·启发式算法·广度优先·宽度优先