Appearance
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;
}
}
AlgoPress