LeetCode17、电话号码的字母组合

题目描述

在这里插入图片描述

第一次方法——递归回溯

明显,这个是根据类似矩阵的列举。建立映射,递归下去,每递归完一次,说明找到了一次的结果。则将结果添加到对应的list里面。看代码很容易懂。

class Solution {
    
    
    public List<String> letterCombinations(String digits) {
    
    
        HashMap<Character,String[]> map = new HashMap<>();
        map.put('2',new String[]{
    
    "a","b","c"});
        map.put('3',new String[]{
    
    "d","e","f"});
        map.put('4',new String[]{
    
    "g","h","i"});
        map.put('5',new String[]{
    
    "j","k","l"});
        map.put('6',new String[]{
    
    "m","n","o"});
        map.put('7',new String[]{
    
    "p","q","r","s"});
        map.put('8',new String[]{
    
    "t","u","v"});
        map.put('9',new String[]{
    
    "w","x","y","z"});

        return getList(digits,map,"",0,new ArrayList<String>()); 
    }
    public List<String> getList(String digits,Map map,String s1,int index,List list){
    
    
        if(index>=digits.length()){
    
    
            return list;
        }
        String []nums = (String[])map.get(digits.charAt(index));
        for(int j=0;j<nums.length;j++){
    
    
            if(index==0){
    
    
                s1 = "";
            }
            String s = s1;//保存之前的值。
            s1+=nums[j];
            getList(digits,map,s1,index+1,list);
            if(index==digits.length()-1){
    
    
                list.add(s1);//添加完了一项。 
            }
            s1 = s;//之前的s1
           
        }
        return list;
    }
    
}

在这里插入图片描述

看这个提交的击败率,还是有点牛批的。毕竟是第一次做出来的嘿嘿。

猜你喜欢

转载自blog.csdn.net/qq_44861675/article/details/108521261