力扣第17题,电话号码的字母组合

题目

https://leetcode.cn/problems/letter-combinations-of-a-phone-number/

答案

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

public class T17 {
          
   
    //力扣T17,电话号码的字母组合
    public static List<String> res = new ArrayList<>();//答案集
    public static 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 static void main(String[] args) {
          
   
        //测试
        T17 t17 = new T17();
        List<String> strings = t17.letterCombinations("23");
        System.out.println(strings);
    }

    public List<String> letterCombinations(String digits) {
          
   
        //初始化答案集
        res = new ArrayList<>();
        //特殊情况直接返回
        if (digits.isEmpty() || digits.isEmpty()){
          
   
            return res;
        }
        dfs(new StringBuffer(),0,digits);

        return res;
    }

    /**
     *
     * @param s 传递字符串
     * @param l 当前索引
     * @param digits 原题字符串
     */
    public static void dfs(StringBuffer s,int l,String digits){
          
   
        //出口检测,索引到底以后添加答案,然后终止递归
        if (l==digits.length()){
          
   
            res.add(s.toString());
            return;
        }

        //获取当前数字对应的三个或者四个字符
        String s1 = map.get(digits.charAt(l));
        for (int i = 0; i < s1.length(); i++) {
          
   
            //循环,将每一个都添加进去后交给下一层递归
            dfs(s.append(s1.charAt(i)),l+1,digits);
            //添加之后要删除,不然会影响答案
            s.deleteCharAt(l);
        }

    }
}
经验分享 程序员 微信小程序 职场和发展