编程语言
首页 > 编程语言> > LeetCode17—电话号码的字母组合(java版)

LeetCode17—电话号码的字母组合(java版)

作者:互联网

题目描述:

标签:深度优先搜索   递归   字符串   回溯算法

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

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

代码:

思路分析:思路同 组合  和 组合总和Ⅲ

1、首先要建立map,找到数字2-9到字符串的映射。

2、递归结束条件,index == digits.length()

3、从左到右遍历,找到index指向数字映射的字符串长度

4、从上到下遍历,回溯

5、回溯之后需清理index对应下的字符!

注意:StringBuffer的两个方法:append()在字符串尾部添加字符,deleteCharAt(index)删除index对应位置上的字符

创建map和初始化的方法:Map<Character,String> map = new HashMap<>(){{

              put(' '," ");

              put(' '," ");

}}

class Solution {
    List<String> result = new ArrayList<String>();
    StringBuffer s = new StringBuffer();
    Map<Character,String> map = 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;
        }
        backTracing(digits,0);
        return result;
    }

    public void backTracing(String digits,int index){
        if(index == digits.length()){
            result.add(s.toString());
            return;
        }
        char digit = digits.charAt(index);
        String letters = map.get(digit);
        for(int i = 0;i < letters.length();i++){
            s.append(letters.charAt(i)); 
            backTracing(digits,index + 1);
            s.deleteCharAt(index);
        }
    }
}

 

标签:digits,index,java,map,put,result,LeetCode17,字母组合,new
来源: https://blog.csdn.net/qq_40840749/article/details/115428974