📅  最后修改于: 2023-12-03 14:56:26.319000             🧑  作者: Mango
给定一个仅包含数字2-9的字符串,返回所有它能表示的字母组合。
数字与字母的对应关系如下(与电话按键相同):
2 - abc 3 - def 4 - ghi 5 - jkl 6 - mno 7 - pqrs 8 - tuv 9 - wxyz
题目要求我们根据输入的数字字符串生成所有它能表示的字母组合。这里的关键点在于生成所有组合,因此我们可以使用递归的方式来解决问题。
我们可以将输入的数字字符串转换为字符数组,递归地从数组的起始位置开始生成所有可能的组合。具体步骤如下:
class Solution:
def letterCombinations(self, digits: str) -> List[str]:
if not digits:
return []
mapping = {
"2": "abc",
"3": "def",
"4": "ghi",
"5": "jkl",
"6": "mno",
"7": "pqrs",
"8": "tuv",
"9": "wxyz"
}
res = []
def helper(i, s):
if i == len(digits):
res.append(s)
return
for c in mapping[digits[i]]:
helper(i+1, s+c)
helper(0, "")
return res
该算法的时间复杂度为$O(3^m * 4^(n-m))$, 其中m是数字中对应3个字母的数目,n是数字中对应4个字母的数目。空间复杂度为$O(3^m * 4^(n-m))$,即为所有可能的组合数。