电话号码的字母组合

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

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

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

class Solution {
    public List < String > letterCombinations(String digits) {
        List < String > resultList = new ArrayList();
        if(digits == null || digits.length() == 0) {
            return resultList;
        }
        Map < Character, List < Character >> map = new HashMap();
        List < Character > list2 = new ArrayList();
        list2.add('a');
        list2.add('b');
        list2.add('c');
        map.put('2', list2);
        List < Character > list3 = new ArrayList();
        list3.add('d');
        list3.add('e');
        list3.add('f');
        map.put('3', list3);
        List < Character > list4 = new ArrayList();
        list4.add('g');
        list4.add('h');
        list4.add('i');
        map.put('4', list4);
        List < Character > list5 = new ArrayList();
        list5.add('j');
        list5.add('k');
        list5.add('l');
        map.put('5', list5);
        List < Character > list6 = new ArrayList();
        list6.add('m');
        list6.add('n');
        list6.add('o');
        map.put('6', list6);
        List < Character > list7 = new ArrayList();
        list7.add('p');
        list7.add('q');
        list7.add('r');
        list7.add('s');
        map.put('7', list7);
        List < Character > list8 = new ArrayList();
        list8.add('t');
        list8.add('u');
        list8.add('v');
        map.put('8', list8);
        List < Character > list9 = new ArrayList();
        list9.add('w');
        list9.add('x');
        list9.add('y');
        list9.add('z');
        map.put('9', list9);

        // // 将队列中已有的组合拉出来,与当前位置的字母逐一组合,然后又放进队列里
        Queue < String > queue = new LinkedList();
        for(int i = 0; i < digits.length(); i++) {
            if(i == 0) {
                List < Character > list = map.get(digits.charAt(i));
                for(Character c: list) {
                    queue.add(String.valueOf(c));
                }
                continue;
            }
            // 队列中已有的组合数量
            int size = queue.size();
            for(int j = 0; j < size; j++) {
                String s = queue.poll();
                List < Character > list = map.get(digits.charAt(i));
                for(Character c: list) {
                    queue.add(s + String.valueOf(c));
                }
            }
        }
        int size = queue.size();
        for(int j = 0; j < size; j++) {
            String s = queue.poll();
            resultList.add(s);
        }
        return resultList;
    }
}
posted @ 2022-11-26 15:19  商商-77  阅读(132)  评论(0编辑  收藏  举报