LeetCode 17.电话号码的字母组合
给定一个仅包含数字 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']
的一个数字。
代码:
class Solution(object):
def letterCombinations(self, digits):
"""
:type digits: str
:rtype: List[str]
"""
# 定义一个字符串列表,每个索引对应一个数字,包含该数字可以转换成的所有可能的字母
characters = ['', '', 'abc', 'def', 'ghi', 'jkl', 'mno', 'pqrs', 'tuv', 'wxyz']
# 获取输入数字字符串的长度
length = len(digits)
# 如果输入字符串为空,则直接返回空列表
if length == 0:
return []
# 初始化结果列表
res = []
# 初始化路径数组,用于存储当前的字母组合
path = [''] * length
# 定义一个递归函数backtrack,用于回溯搜索所有可能的字母组合
def backtrack(i):
# 如果当前索引i等于数字字符串的长度,说明已经找到了一个完整的字母组合
if i == length:
# 将当前路径的字母组合添加到结果列表中
res.append(''.join(path))
# 返回是为了结束当前分支的搜索,回溯到上一个状态
return
# 遍历当前数字对应的所有可能的字母
for c in characters[int(digits[i])]:
# 将当前字母添加到路径中
path[i] = c
# 递归调用backtrack函数,搜索下一个数字对应的字母组合
backtrack(i + 1)
# 从第一个数字开始回溯搜索
backtrack(0)
# 返回所有找到的字母组合
return res