题目
![]()
题解:回溯
JavaScript
var letterCombinations = function(digits) {
if (digits.length == 0) return []
const res = []
// 数字到字母的映射
const map={'2': 'abc', '3': 'def', '4': 'ghi', '5': 'jkl', '6': 'mno', '7': 'pqrs', '8': 'tuv', '9': 'wxyz' }
const dfs=(cur_str,next_digits)=>{ //cur_str指当前字母组合, next_digits指剩余的字符串
//递归出口,如果没有剩余的数字,说明当前组合完成,添加到结果中
if(next_digits.length == 0){
res.push(cur_str)
return
}
const letters = map[next_digits[0]]//取next_digits第一个元素,在map中找到对于的字符串
for(const letter of letters){
cur_str += letter //做选择,添加当前字母到组合中
dfs(cur_str, next_digits.slice(1))// 递归调用,处理剩余的数字(从next_digits的第二位开始)
cur_str = cur_str.slice(0,-1)// 撤销选择,去掉组合中的最后一个字母
}
}
dfs('',digits)// 从空字符串和输入的数字开始进行深度优先搜索
return res
};
python
class Solution:
def letterCombinations(self, digits: str) -> List[str]:
if not digits:#检查输入的数字串 digits 是否为空
return []
a = {"2": "abc", "3": "def", "4": "ghi", "5": "jkl", "6": "mno", "7": "pqrs", "8": "tuv", "9": "wxyz"}#定义字典 a,其中键为数字字符,值为对应的字母字符串
def backtrack(combination, next_digits):#combination 表示当前的字母组合,next_digits 表示剩余的数字串。
if len(next_digits) == 0:#若剩余的数字串为空,说明已经生成了一个完整的组合,将其添加到结果列表 result 中。
result.append(combination) # 将当前组合添加到结果列表中
else:#如果剩余的数字串不为空
current_digit = next_digits[0]#取出剩余数字串的第一个数字
letters = a[current_digit] # 通过字典 a 获取当前数字对应的字母字符串
for letter in letters:
combination += letter#将当前字母 letter 添加到当前组合 combination 中
backtrack(combination, next_digits[1:])#递归调用 backtrack 函数,传入更新后的参数 combination 和去掉第一个数字的剩余数字串 next_digits[1:]
combination = combination[:-1] #撤销选择,回溯到上一层,恢复状态,去除最后一个字母
result = []
backtrack("", digits) # 初始调用回溯函数,传入空字符串和输入的数字串
return result