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);
            }
        }
    }
}


目录
相关文章
|
7月前
|
存储 索引
LeetCode 387. 字符串中的第一个唯一字符
LeetCode 387. 字符串中的第一个唯一字符
44 0
|
7月前
|
C++
c++:string相关的oj题(把字符串转换成整数、344.反转字符串、387. 字符串中的第一个唯一字符、917. 仅仅反转字母)
c++:string相关的oj题(把字符串转换成整数、344.反转字符串、387. 字符串中的第一个唯一字符、917. 仅仅反转字母)
83 0
|
7月前
|
C++ 索引
c++:string相关的oj题(415. 字符串相加、125. 验证回文串、541. 反转字符串 II、557. 反转字符串中的单词 III)
c++:string相关的oj题(415. 字符串相加、125. 验证回文串、541. 反转字符串 II、557. 反转字符串中的单词 III)
70 0
|
6月前
|
C++
【洛谷 B2025】输出字符菱形 题解(raw string literal)
使用`*`构建一个斜置的、对角线长度为5的菱形。无输入要求。输出示例:`*`、`***`、`*****`、`***`、` *`。代码实现使用C++,直接打印预定义字符串完成。
83 0
|
7月前
49.输入一字符串,检查是否回文 (回文是指正反序相同,如,LeveL)
49.输入一字符串,检查是否回文 (回文是指正反序相同,如,LeveL)
41 0
|
存储 算法 C语言
【DFS】LeetCode 17. 电话号码的字母组合
看第一个示例:输入"23",其对应的是"abc"与"de".根据全排列的特点,我们先把它们按层状结构写开,之后依次排列组合即可
82 0
|
7月前
|
机器学习/深度学习 Java
java字符串练习题3、字符串中字符是否相同判断
java字符串练习题3、字符串中字符是否相同判断
64 0
|
7月前
|
算法
leetcode:387. 字符串中的第一个唯一字符
leetcode:387. 字符串中的第一个唯一字符
29 0
每日一题---判断输入的字符串是否为回文
每日一题---判断输入的字符串是否为回文
每日一题---判断输入的字符串是否为回文
力扣刷题记录——412. Fizz Buzz、414. 第三大的数、415. 字符串相加
力扣刷题记录——412. Fizz Buzz、414. 第三大的数、415. 字符串相加
力扣刷题记录——412. Fizz Buzz、414. 第三大的数、415. 字符串相加