LeetCode17、电话号码的字母组合

文章目录

  • 题目描述
  • 第一次方法——递归回溯

题目描述

LeetCode17、电话号码的字母组合_第1张图片

第一次方法——递归回溯

明显,这个是根据类似矩阵的列举。建立映射,递归下去,每递归完一次,说明找到了一次的结果。则将结果添加到对应的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;
    }
    
}

LeetCode17、电话号码的字母组合_第2张图片

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

你可能感兴趣的:(#,LeetCode,leetcode,java,python,js,算法)