Skip to content
本页目录

0017-电话号码的字母组合

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

给定一个仅包含数字 2-9 的字符串,返回所有它能表示的字母组合。答案可以按 任意顺序 返回。 给出数字到字母的映射如下(与电话按键相同)。注意 1 不对应任何字母。

示例 1:

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

示例 2:

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

示例 3:

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

提示:

  • 0 <= digits.length <= 4
  • digits[i] 是范围 ['2', '9'] 的一个数字。

思路

参考代码

csharp
public class Solution {

    private Dictionary<char,char[]> dict = new Dictionary<char,char[]>();
    private List<string> results = new List<string>();

    private void dfs(int index, string digits,List<char> list){
        if(index == digits.Length){
            //输出
            string result = "";
            for(int i=0; i<list.Count; i++){
                result+=list[i];
            }
            results.Add(result);
            return;
        }
        char c = digits[index];
        for(int i=0; i < dict[c].Length; i++){
            list.Add(dict[c][i]);
            dfs(index+1,digits,list);
            list.RemoveAt(list.Count-1);
        }
    }

    public IList<string> LetterCombinations(string digits) {
        //初始化电话号码
        dict.Add('2',new char[]{'a','b','c'});
        dict.Add('3',new char[]{'d','e','f'});
        dict.Add('4',new char[]{'g','h','i'});
        dict.Add('5',new char[]{'j','k','l'});
        dict.Add('6',new char[]{'m','n','o'});
        dict.Add('7',new char[]{'p','q','r','s'});
        dict.Add('8',new char[]{'t','u','v'});
        dict.Add('9',new char[]{'w','x','y','z'});
        //回溯
        if(digits.Length > 0){
            List<char> list = new List<char>();
            dfs(0,digits,list);
        }
        return results;
    }
}

Released under the MIT License.