力扣17-电话号码的字母组合——DFS&回溯

该博客详细介绍了如何使用深度优先搜索(DFS)算法解决将数字字符串映射到其对应的字母组合问题。作者通过创建一个全局字符串数组来存储数字与字母的映射,并利用DFS遍历所有可能的字母组合。当遍历到指定长度时,将路径添加到结果列表中。代码中展示了具体的实现细节,包括如何递归地进行DFS搜索并回溯。此问题属于字符串处理和算法应用的范畴。
摘要由CSDN通过智能技术生成

题目描述

给定一个仅包含数字 2-9 的字符串,返回所有它能表示的字母组合。答案可以按 任意顺序 返回。

给出数字到字母的映射如下(与电话按键相同)。注意 1 不对应任何字母。

求解思路

这位大佬的视频我认为是讲的比较清晰的:

力扣【忍者算法】认准忍者算法!!!icon-default.png?t=M7J4https://leetcode.cn/problems/letter-combinations-of-a-phone-number/solution/ren-zhe-suan-fa-ren-zhun-ren-zhe-suan-fa-4krw/具体流程见代码注释,对于没有接触过dfs和回溯的人来说多看几遍就差不多能理解。

输入输出示例

代码

class Solution {
    //建立全局变量字符串数组,分别对应每个数字所对应的字符串,01没有所以给空字符串
    String[] map ={"","","abc","def","ghi","jkl","mno","pqrs","tuv","wxyz"};
    //列表用于存放最后的结果
    List<String> pathList = new ArrayList<>();

    public List<String> letterCombinations(String digits) {
        //判断数字为空或者长度为0,返回空列表
        if(digits == null || digits.length() == 0) return pathList;
        //深度优先遍历,传入的两个参数都是字符串
        dfs(new StringBuilder(),digits);
        return pathList;//最后返回结果
    }
    private void dfs(StringBuilder path, String digits){
        //终止迭代的条件,有几个数组合的字母数就有几个,当两者相等说明全部遍历完
        if(path.length() == digits.length()){
            pathList.add(path.toString());//StringBuilder要转为String才能add
            return;
        }
        //找到当前遍历的数字,字符相减是整形数字
        int digitNum = digits.charAt(path.length()) - '0';
        //找到当前数字所对应的字母字符串
        String currentLetter = map[digitNum];
        //遍历这个字符串
        for(char c : currentLetter.toCharArray()){
            path.append(c);//将当前字母加入
            dfs(path,digits);//进一步搜索后面的
            path.deleteCharAt(path.length() - 1);//将当前节点剔除,返回上一级
        }
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值