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
        }
    }
}
相关推荐
烁34727 分钟前
每日一题(小白)模拟娱乐篇13
java·算法·娱乐·暴力
烁34735 分钟前
每日一题(小白)模拟娱乐篇14
java·开发语言·算法·娱乐·暴力
Brookty35 分钟前
【算法】插入排序
数据结构·算法·排序算法
GISer_Jing4 小时前
前端算法实战:大小堆原理与应用详解(React中优先队列实现|求前K个最大数/高频元素)
前端·算法·react.js
小森77675 小时前
(三)机器学习---线性回归及其Python实现
人工智能·python·算法·机器学习·回归·线性回归
振鹏Dong5 小时前
超大规模数据场景(思路)——面试高频算法题目
算法·面试
uhakadotcom5 小时前
Python 与 ClickHouse Connect 集成:基础知识和实践
算法·面试·github
uhakadotcom5 小时前
Python 量化计算入门:基础库和实用案例
后端·算法·面试
uhakadotcom6 小时前
使用 Python 与 BigQuery 进行交互:基础知识与实践
算法·面试
uhakadotcom6 小时前
使用 Hadoop MapReduce 和 Bigtable 进行单词统计
算法·面试·github