LeetCode算法题python解法:17. Letter Combinations of a Phone Number
Posted slarker
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了LeetCode算法题python解法:17. Letter Combinations of a Phone Number相关的知识,希望对你有一定的参考价值。
题目:
Given a string containing digits from 2-9
inclusive, return all possible letter combinations that the number could represent.
A mapping of digit to letters (just like on the telephone buttons) is given below. Note that 1 does not map to any letters.
Example:
Input: "23" Output: ["ad", "ae", "af", "bd", "be", "bf", "cd", "ce", "cf"].
Note:
Although the above answer is in lexicographical order, your answer could be in any order you want.
这道题翻译成中文其实比较简单,就是给你数字,让你输出数字映射的字母所有可能出现的组合情况。同一个数字映射的字母不会组合到一起,不区分字母顺序,每个字母组合必须包含所有数字映射的一个字母。
提供两种思路,一种是传送生成器,另一种是传统递归。
这里利用递归可以轻松解决,刚好最近看了一些生成器相关的资料,索性利用递归生成器,更加简洁方便一些。
代码如下:
1.递归生成器
1 class Solution: 2 def letterCombinations(self, digits): 3 return list(self.recur(digits))
4 def recur(self, x): #由于LeetCode验证代码时不会自动将生成器转化为列表,所以只能生成器写在外面,主函数只打印答案 5 dic = {\'2\': \'abc\', \'3\': \'def\', \'4\': \'ghi\', \'5\': \'jkl\', \'6\': \'mno\', \'7\': \'pqrs\', \'8\': \'tuv\', \'9\': \'wxyz\'} 6 if len(x) == 0: #将digits为空值拿出来特别处理 7 return [] 8 for i in dic[x[0]]: 9 if len(x) == 1: #递归到digits只剩最后一个值挨个生成该值的映射 10 yield i 11 else: 12 for j in self.recur[1:]): #这里返回的生成器,可以用来迭代 13 yield i + j #拼接字符串,一层一层向上返还
2.传统递归
1 class Solution: 2 def letterCombinations(self, digits): 3 out = [] 4 dic = {\'2\': \'abc\', \'3\': \'def\', \'4\': \'ghi\', \'5\': \'jkl\', \'6\': \'mno\', \'7\': \'pqrs\', \'8\': \'tuv\', \'9\': \'wxyz\'} 5 if len(digits) == 0: 6 return [] 7 for i in dic[digits[0]]: 8 if len(digits) == 1: 9 out.append(i) 10 if i == dic[digits[0]][-1]: 11 return out 12 else: 13 for j in self.letterCombinations(digits[1:]): 14 out.append(i+j) 15 if i == dic[digits[0]][-1] and j == self.letterCombinations(digits[1:])[-1]: 16 return out
传统递归思路简单,层层相加,代码可读性低
以上是关于LeetCode算法题python解法:17. Letter Combinations of a Phone Number的主要内容,如果未能解决你的问题,请参考以下文章
LeetCode算法题python解法:23. Merge k Sorted Lists
LeetCode算法题python解法:25. Reverse Nodes in k-Group
LeetCode算法题-Move Zeroes(Java实现-三种解法)
LeetCode算法题-Valid Perfect Square(Java实现-四种解法)