今天在 leetcode 上刷题的时候,又刷到一个组合的问题,下面是这道题的链接,感兴趣的小伙伴也可以去尝试一下。
https://leetcode.cn/problems/letter-combinations-of-a-phone-number/
示例 1:
输入:digits = "23"
输出:["ad","ae","af","bd","be","bf","cd","ce","cf"]
示例 2:
输入:digits = ""
输出:[]
示例 3:
输入:digits = "2"
输出:["a","b","c"]
这也是一个使用多层 for 循环来写比较麻烦的题目。还是和组合问题1和组合问题2类似,我们还是可以画这样一个图,如果是数字 2 和 3,第一步可以选择 abc 中的一个字符,第二步针对选择的 abc 中的每一个,又可以选择 def 中的任何一个,所以可以构成下面这个树结构。
在代码实现上,可以选择递归。
代码中,先创建数字对应字母的映射,然后将题目给定的数字字符串转换为对应的字符列表,然后在 dfs 函数中完成对字符列表的递归,按深度遍历的方式遍历完这棵树,一旦到达叶子节点,就将 root 到 叶子节点的路径加入到结果集中,最后返回结果集。
最后:祝大家中秋节快乐!