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
        }
    }
}
相关推荐
CCF_NOI.6 分钟前
洛谷P12610 ——[CCC 2025 Junior] Donut Shop
算法
Joseit29 分钟前
从零打造AI面试系统全栈开发
人工智能·面试·职场和发展
鑫鑫向栄1 小时前
[蓝桥杯]模型染色
数据结构·c++·算法·职场和发展·蓝桥杯
1白天的黑夜13 小时前
栈-20.有效的括号-力扣(LeetCode)
c++·算法·leetcode
小白程序员丶钟同学3 小时前
L1-019 谁先倒 (15 分)
数据结构·算法
天真小巫3 小时前
如何提高工作效率
职场和发展
<但凡.3 小时前
题海拾贝:P2347 [NOIP 1996 提高组] 砝码称重
数据结构·c++·算法
bubiyoushang8883 小时前
matlab实现高斯烟羽模型算法
开发语言·算法·matlab
2301_766536054 小时前
刷leetcode hot100--矩阵6/1
算法·leetcode·矩阵