给定一个仅包含数字 2-9
的字符串,返回所有它能表示的字母组合。答案可以按 任意顺序 返回。
给出数字到字母的映射如下(与电话按键相同)。注意 1 不对应任何字母。
思路 回溯法
log:当前结果数组;level:记录当前数组的位置
递归结束条件是log.Length = digits.Length
将int与string类型对应关系存在字典中,通过digits[i] 找对应的value,遍历value长度,先将字符加入log,然后递归处理下一个level,恢复状态,撤销选择
result = []
def backtrack(路径, 选择列表):
if 满足结束条件:
result.add(路径)
return
for 选择 in 选择列表:
做选择
backtrack(路径, 选择列表)
撤销选择
public class Solution {
List<string> res = new List<string>();
public IList<string> LetterCombinations(string digits) {
if(string.IsNullOrWhiteSpace(digits))
return res;
Dictionary<char, string> map = new Dictionary<char, string>()
{
{'2', "abc"},
{'3', "def"},
{'4', "ghi"},
{'5', "jkl"},
{'6', "mno"},
{'7', "pqrs"},
{'8', "tuv"},
{'9', "wxyz"}
};
_LetterCombinations(digits, String.Empty, map, 0);
return res;
}
private void _LetterCombinations(string digits, string log, Dictionary<char, string> map, int level)
{
if(log.Length == digits.Length)
{
res.Add(log);
return;
}
string str = map[digits[level]];
for(int i = 0; i < str.Length; i++)
{
log = log + str[i];
_LetterCombinations(digits, log, map, level + 1);
log = log.Remove(log.Length - 1);
}
}
}