leetcode17 电话号码的字母组合

给定一个仅包含数字 2-9 的字符串,返回所有它能表示的字母组合。答案可以按 任意顺序 返回。

给出数字到字母的映射如下(与电话按键相同)。注意 1 不对应任何字母

链接:https://leetcode-cn.com/problems/letter-combinations-of-a-phone-numberimage

示例 1:

输入:digits = "23"
输出:["ad","ae","af","bd","be","bf","cd","ce","cf"]

示例 2:

输入:digits = ""
输出:[]

示例 3:

输入:digits = "2"
输出:["a","b","c"]

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

0 <= digits.length <= 4
digits[i] 是范围 ['2', '9'] 的一个数字。
class Solution {
    StringBuilder builder= new StringBuilder("");
    List<String> ans= new ArrayList<>();
    public List<String> letterCombinations(String digits) {

        HashMap<Integer,ArrayList<Character>> Map=new HashMap<>();
        Map.put(2,new ArrayList<>(){{
            add('a');
            add('b');
            add('c');
        }});
        Map.put(3,new ArrayList<>(){{
            add('d');
            add('e');
            add('f');
        }});
        Map.put(4,new ArrayList<>(){{
            add('g');
            add('h');
            add('i');
        }});
        Map.put(5,new ArrayList<>(){{
            add('j');
            add('k');
            add('l');
        }});
        Map.put(6,new ArrayList<>(){{
            add('m');
            add('n');
            add('o');
        }});
        Map.put(7,new ArrayList<>(){{
            add('p');
            add('q');
            add('r');
            add('s');
        }});
        Map.put(8,new ArrayList<>(){{
            add('t');
            add('u');
            add('v');
        }});
        Map.put(9,new ArrayList<>(){{
            add('w');
            add('x');
            add('y');
            add('z');
        }});
        char[] inputArray=digits.toCharArray();
        if(inputArray.length==0) return ans;
        compute(0,inputArray,Map);
        return ans;
    }

    public void compute(int depth,char[] data,HashMap<Integer,ArrayList<Character>> map)
    {
        if(depth>=data.length) {
            ans.add(builder.toString());
            return;
        }
        if(data.length==0)
        {
            return ;
        }
        ArrayList<Character> sets=map.get(data[depth]-'0');
        for(char e:sets)
        {
            builder.append(e);
            compute(depth+1,data,map);
            builder.delete(depth,depth+1);
        }
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值