目录
介绍
给定一个仅包含数字 2-9 的字符串,返回所有可能的字母组合。数字到字母的映射方式如下(与电话按键相同):
2 -> "abc"
3 -> "def"
4 -> "ghi"
5 -> "jkl"
6 -> "mno"
7 -> "pqrs"
8 -> "tuv"
9 -> "wxyz"
解题思路
我们可以通过回溯算法来解决这个问题。具体思路如下:
- 初始化一个哈希表
mapping
,将数字映射到对应的字母上。 - 定义一个递归函数
backtrack
,其参数包括当前已经组合的字符串combination
和剩余未处理的数字next_digits
。 - 如果
next_digits
为空,说明已经处理完所有数字,将当前组合添加到输出列表中。 - 如果
next_digits
不为空,取出next_digits
的第一个数字,根据哈希表找到对应的字母集合,然后对每个字母递归调用backtrack
,将当前字母加入组合中,并传入剩余的数字。 - 返回最终的输出列表。
代码实现
class Solution(object):
def letterCombinations(self, digits):
if not digits:
return []
mapping = {
'2': 'abc', '3': 'def', '4': 'ghi',
'5': 'jkl', '6': 'mno', '7': 'pqrs',
'8': 'tuv', '9': 'wxyz'
}
def backtrack(combination, next_digits):
if not next_digits:
output.append(combination)
else:
for letter in mapping[next_digits[0]]:
backtrack(combination + letter, next_digits[1:])
output = []
backtrack('', digits)
return output
总结
通过本篇博客,我们学习了如何利用回溯算法来生成电话号码的所有可能字母组合。