力扣第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);
        }

    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值