电话号码对应字母组合问题:给定一个仅包含数字 2-9 的字符串,返回所有它能表示的字母组合,如果有多个字母组合,则按照字典序排列。给出数字到字母的映射如下(与电话按键相同)。注意 1 不对应任何字母。例如,输入:"23",则输出:["ad", "ae", "af", "bd", "be", "bf", "cd", "ce", "cf"]。
时间: 2023-07-09 08:44:39 浏览: 350
JS实现电话号码的字母组合算法示例
好的,这是一个经典的回溯算法问题,可以使用递归来解决。我们可以将数字到字母的映射存储在一个字典中,然后从输入的数字字符串的第一个数字开始,递归地遍历所有可能的字母组合。具体实现步骤如下:
1. 建立数字到字母的映射字典,例如:
```
phone_dict = {
'2': 'abc',
'3': 'def',
'4': 'ghi',
'5': 'jkl',
'6': 'mno',
'7': 'pqrs',
'8': 'tuv',
'9': 'wxyz'
}
```
2. 定义一个递归函数 `backtrack(combination, next_digits)`,其中 `combination` 表示当前的字母组合,`next_digits` 表示剩余的数字字符串。
3. 如果 `next_digits` 为空字符串,则说明已经遍历完了所有数字,将当前的字母组合加入结果列表中。
4. 如果 `next_digits` 不为空,则取出数字字符串的第一个数字 `digit`,并遍历对应的所有字母 `letter`,对于每一个字母,将其加入当前的字母组合 `combination` 中,并递归调用 `backtrack` 函数,将剩余的数字字符串 `next_digits[1:]` 和更新后的字母组合 `combination` 作为参数传递。
5. 递归结束后,返回结果列表。
下面是 Python 的实现代码:
```python
def letterCombinations(digits):
phone_dict = {
'2': 'abc',
'3': 'def',
'4': 'ghi',
'5': 'jkl',
'6': 'mno',
'7': 'pqrs',
'8': 'tuv',
'9': 'wxyz'
}
if not digits:
return []
def backtrack(combination, next_digits):
if not next_digits:
res.append(combination)
else:
for letter in phone_dict[next_digits[0]]:
backtrack(combination + letter, next_digits[1:])
res = []
backtrack('', digits)
return sorted(res)
```
如果输入 `"23"`,则输出 `["ad", "ae", "af", "bd", "be", "bf", "cd", "ce", "cf"]`。
阅读全文