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

示例 1:
输入:digits = "23" 输出:["ad","ae","af","bd","be","bf","cd","ce","cf"]
示例 2:
输入:digits = "2" 输出:["a","b","c"]
提示:
1 <= digits.length <= 4digits[i]是范围['2', '9']的一个数字。
思路
最直接的思路:对输入的数字串挨个处理,遍历选取当前数字的字母组合,选好一个就处理下一个
Step 1:定义数字 - 字母的映射关系
Step 2:处理边界逻辑:当输入的数字串为空时,不需要处理,直接返回空列表
Step 3:回溯的核心逻辑
(1)单层逻辑:对当前的数字,我要遍历选取其所映射的字母组合,选好一个就与当前的字符串拼接,并进行下一个数字的处理
(2)回溯函数需要传递的参数:当前处理到哪个数字了(index),当前拼接好的字符串(temp)
(3)终止条件:当拼接的字符串的长度 == 输入的数字串的长度,说明找到了一个组合,存进res答案中
代码
因为python的字符串是不可变类型,所以使用temp + char后,并没有改变temp的值,而是复制了一个新的字符串,所以backtrack()之后不需要使用temp - char还原,本身就没有变
class Solution:
def letterCombinations(self, digits: str) -> List[str]:
digit_map = {
'2':"abc", '3':"def", '4':"ghi", '5':"jkl", '6':"mno", '7':"pqrs", '8':"tuv", '9':"wxyz"
} # 定义数字 - 字母映射
n = len(digits)
if n == 0:
return []
res = []
def backtrack(index, temp): # 回溯函数
if len(temp) == n: # 终止条件
res.append(temp)
return
digit = digits[index]
letters = digit_map[digit]
for char in letters: # 递归处理当前数字的字母组合
backtrack(index + 1, temp + char)
backtrack(0, "")
return res
541

被折叠的 条评论
为什么被折叠?



