0017

17. 电话号码的字母组合

题目

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

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

img

示例1:

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

示例2:

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

方法一:回溯

思路及算法

class Solution {
    public List<String> letterCombinations(String digits) {

        List<String> combinations = new ArrayList<String>();

        if(digits.length() == 0){
            return combinations;
        }

       Map<Character,String> phoneMap = new HashMap<Character,String>(){{
           put('2',"abc");
           put('3',"def");
           put('4',"ghi");
           put('5',"jkl");
           put('6',"mno");
           put('7',"pqrs");
           put('8',"tuv");
           put('9',"wxyz");     
       }}; 

       backtrack(combinations, phoneMap, digits, 0, new StringBuffer());
       return combinations;
    }

          public void backtrack(List<String> combinations, Map<Character,String> phoneMap, String digits, int index,StringBuffer combination) {
           if (index == digits.length()) {
               combinations.add(combination.toString());
           } else {
               char digit = digits.charAt(index);
               String letters = phoneMap.get(digit);
               int n = letters.length(); //一个数字所含有的字母数量
               for (int i = 0; i < n; i++){
                   combination.append(letters.charAt(i));
                   backtrack(combinations, phoneMap, digits, index + 1, combination);
                   combination.deleteCharAt(index);
               }
           }
       }
}
posted @ 2022-04-04 23:28  爱睡觉的卡比兽  阅读(279)  评论(0)    收藏  举报