力扣面试150题--电话号码的字母组合

发布于:2025-06-28 ⋅ 阅读:(14) ⋅ 点赞:(0)

Day 69

题目描述

在这里插入图片描述

思路

采取了回溯的做法,做法如下

  1. 将电话号码对应的字母字符串加入map方便查找
  2. 进入find函数 介绍一下参数,res为结果集合,num为map表,digits为处理的数组集合,index为层数(这个后面解释),re为暂时处理的字符串
  3. 因为我们要的是随机组合的字母字符串,所以当长度等于digits的长度时我们才加入res
  4. 取出digits的字符(就是数字),从num中取出对应的字母字符串
  5. 进入循环,将该字母字符串中字符加入展示处理的字符串re
  6. 这里需要解释一下index层数,我们将digits的每个数字视为一层,比如234,2就是第一层(这里代码算的第0层),如果说取出随机组合,那么2的字符串中每一个字符都要拼上下一层的3所有字符串的字符(有点拗口 下面有个图 结合理解一下)。
  7. 回到代码,我们取出一个字符,就拼上下一层的字符,这样一直拼到最后一层,就是一个随机组合的结果
  8. 将其加入到结果集res
  9. 清空暂时字符串re
    在这里插入图片描述
class Solution {
    List<String>res=new ArrayList<>();
    public List<String> letterCombinations(String digits) {
        List<String>res=new ArrayList<String>();
        if(digits.length()==0){
            return res;
        }
        Map<Character,String>num=new HashMap<>();
        num.put('2', "abc");
        num.put('3', "def");
        num.put('4', "ghi");
        num.put('5', "jkl");
        num.put('6', "mno");
        num.put('7', "pqrs");
        num.put('8', "tuv");
        num.put('9', "wxyz");
        find(res,num,digits,0,new StringBuffer());
        return res;
     
    }
  public void find(List<String> res, Map<Character, String> num, String digits, int index, StringBuffer re){
    if(index==digits.length()){
        res.add(re.toString());
    }
    else{
        char a=digits.charAt(index);
        String m=num.get(a);
        for(int i=0;i<m.length();i++){
            re.append(m.charAt(i));
            find(res,num,digits,index+1,re);//ad ae af
            re.deleteCharAt(index);
        }
    }

  }

}

网站公告

今日签到

点亮在社区的每一天
去签到