leet_code_17.电话号码的字母组合(递归)

简介: leet_code_17.电话号码的字母组合(递归)

题目信息


给定一个仅包含数字2-9的字符串,返回所有它能表示的字母组合。

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

20200828090314575.jpg

示例:

输入:“23”

输出:[“ad”, “ae”, “af”, “bd”, “be”, “bf”, “cd”, “ce”, “cf”].


解题方法

class Solution {
    // 定义2-9对应的字母
    private Map<Character, String> map = new HashMap<Character, String>(){
        {
            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) {
        // 定义存放返回数据的集合
        List<String> res = new ArrayList();
        // 如果传入数据为null或空,返回空集合
        if(digits == null || digits.equals("")){
            return res;
        }
        // 递归调用
        dfs(digits, 0, new StringBuilder(), res);
        return res;
    }
    /**
     * digits 前台传递过来的字符串
     * index  定义当前循环到第几个字符的步长
     * str    返回结果的字符串,因为需要不停的拼接,所以用StringBuilder
     * res    存放返回结果的list
     **/
    public void dfs(String digits, int index, StringBuilder str, List<String> res){
        // 如果当前的步长等于前台传递的字符长度,则代表循环结束,保存到返回结果的list中
        if(index == digits.length()){
            res.add(str.toString()); 
        }else{
            // 取出当前步长的数字对应的字母,转换成char类型的数组
            char [] chatArray = map.get(digits.charAt(index)).toCharArray();
            // 遍历数组
            for(char c : chatArray){
                // 递归,拼接后面的数字对应的字符
                dfs(digits, index + 1, str.append(c), res);
                // 因为StringBuilder拼接了上一个字符,故需要截取掉
                str.deleteCharAt(str.length() - 1);
            }
        }
    }
}


目录
相关文章
|
3月前
|
C++ 索引
c++:string相关的oj题(415. 字符串相加、125. 验证回文串、541. 反转字符串 II、557. 反转字符串中的单词 III)
c++:string相关的oj题(415. 字符串相加、125. 验证回文串、541. 反转字符串 II、557. 反转字符串中的单词 III)
55 0
|
4天前
|
算法
LeetCode第17题电话号码的字母组合
该文章介绍了 LeetCode 第 17 题电话号码的字母组合的解法,通过分析得出可使用递归和回溯的思想解决,避免循环穷举的高循环次数,并给出了具体的编码实现,同时总结了该题较难理解,需要了解递归的本质,当嵌套循环层次多时可考虑递归。
LeetCode第17题电话号码的字母组合
|
3月前
49.输入一字符串,检查是否回文 (回文是指正反序相同,如,LeveL)
49.输入一字符串,检查是否回文 (回文是指正反序相同,如,LeveL)
28 0
|
存储 算法 C语言
【DFS】LeetCode 17. 电话号码的字母组合
看第一个示例:输入"23",其对应的是"abc"与"de".根据全排列的特点,我们先把它们按层状结构写开,之后依次排列组合即可
66 0
|
3月前
|
Java
leetcode-17:电话号码的字母组合
leetcode-17:电话号码的字母组合
23 0
leetcode-17:电话号码的字母组合
|
机器学习/深度学习 算法 安全
LeetCode - #17 电话号码的字母组合
不积跬步,无以至千里;不积小流,无以成江海,Swift社区 伴你前行。如果大家有建议和意见欢迎在文末留言,我们会尽力满足大家的需求。
leetcode:17.电话号码的字母组合
可以抽象成一个排列组合的问题,题目的意思就是说当输入"23"的时候实际上就是按了两次按键,分别是2和3,然后2对应的是abc,3对应的是def,所以我们只需递归遍历每一种结果即可解决问题。
31 0
leetcode:17.电话号码的字母组合
|
算法 JavaScript
回溯法解决【电话号码的字母组合】问题
接月初算法系列,思路: 滑动窗口 => BFS、DFS => 回溯法,各个经典!
|
Java 测试技术 C++
【LeetCode】 17. 电话号码的字母组合
17.电话号码的字母组合
100 0
【LeetCode】 17. 电话号码的字母组合