给定一个仅包含数字 2-9
的字符串,返回所有它能表示的字母组合。答案可以按 任意顺序 返回。
给出数字到字母的映射如下(与电话按键相同)。注意 1 不对应任何字母。
思路 回溯法
log:当前结果数组;level:记录当前数组的位置
递归结束条件是log.Length = digits.Length
将int与string类型对应关系存在字典中,通过digits[i] 找对应的value,遍历value长度,先将字符加入log,然后递归处理下一个level,恢复状态,撤销选择
result = []
def backtrack(路径, 选择列表):if 满足结束条件:result.add(路径)returnfor 选择 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);}}
}