LeetCode17 电话号码的字母组合
发布日期:2021-05-14 23:49:54 浏览次数:19 分类:精选文章

本文共 1497 字,大约阅读时间需要 4 分钟。

原题目分析

我们需要根据给定的数字字符串,生成所有可能对应的字母组合。这个问题类似于电话键盘上的字母排列。每个数字对应特定的字母如下:

  • 2: abc
  • 3: def
  • 4: ghi
  • 5: jkl
  • 6: mno
  • 7: pqrs
  • 8: tuv
  • 9: wxyz

我们的目标是找出所有可能的组合,例如输入“23”的输出为["ad", "ae", "af", "bd", "be", "bf", "cd", "ce", "cf"]。

解决方法

为了解决这个问题,我们可以使用回溯算法(Depth-First Search,DFS)来逐步构建所有可能的组合。具体步骤如下:

  • 创建映射字典:首先,我们需要将数字映射到对应的字母。可以使用字典或数组来存储这些映射关系。
  • 初始化回溯函数:使用递归函数来实现深度优先搜索。每次选择当前数字对应的所有字母,并为每个字母继续递归。
  • 临时保存路径:在递归过程中,使用一个临时数组保存当前路径,确保每个分支都能正确独立进行。
  • 判断终止条件:当我们处理完所有数字后,将当前路径添加到结果中。
  • 返回结果:将所有可能的组合收集起来,并返回给用户。
  • 源代码

    def letterCombinations(digits):    if not digits:        return []        mapping = {        '2': ['a', 'b', 'c'],        '3': ['d', 'e', 'f'],        '4': ['g', 'h', 'i'],        '5': ['j', 'k', 'l'],        '6': ['m', 'n', 'o'],        '7': ['p', 'q', 'r', 's'],        '8': ['t', 'u', 'v'],        '9': ['w', 'x', 'y', 'z']    }        result = []    current_path = []        def dfs(index, path):        if index == len(digits):            result.append(''.join(path))            return        for char in mapping[digits[index]]:            path.append(char)            dfs(index + 1, path)            path.pop()        dfs(0, current_path)    return result

    解释

  • 映射字典mapping 字典将每个数字映射到对应的字母列表。
  • 返回类型:函数 letterCombinations 返回一个包含所有可能字母组合的列表。
  • 初始化函数current_path 用于保存当前构建的路径,result 用于存储最终的结果。
  • 递归函数dfs 根据当前索引和路径,递归地尝试所有可能的字母组合。
  • 路径管理:在递归开始时,添加当前字母到路径;递归返回后,删除最后一个字母,以确保路径清空以便下一次递归使用同一个列表。
  • 这种方法能够高效地生成所有可能的字母组合。递归的终止条件是处理完所有数字,或者当所有数字对应的字母都被处理完时结束。

    示例

    输入:“23”输出:["ad", "ae", "af", "bd", "be", "bf", "cd", "ce", "cf"]

    上一篇:LeetCode31 下一个排列
    下一篇:LeetCode78/90 子集

    发表评论

    最新留言

    路过,博主的博客真漂亮。。
    [***.116.15.85]2025年04月22日 15时33分01秒