题目:
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”].
题意: 给出一系列数字字符串,每一个数字对应的字母如上图电话号码对应关系,要求得到所有数字对应字母所组成的所有字符串。
分析: 此题可以采用递归的方法实现,对于多个数字,可以采用两两合并,先合并前两个数字对应字母组成的字符串列表,然后将合并后的列表与第三个数字对应的字符进行合并,以此类推…
class Solution(object):
def two_list_combin(self, list1, list2):
combin_list = []
for i in list2:
for j in list1:
combin_list.append(i+j)
# print(combin_list)
return combin_list
def letterCombinations(self, digits):
"""
:type digits: str
:rtype: List[str]
"""
if not digits:
return []
dic = {2:'abc', 3:'def', 4:'ghi', 5:'jkl', 6:'mno', 7:'pqrs', 8:'tuv', 9:'wxyz'}
list2 = ['']
for i in digits:
letter = dic[int(i)]
list1 = [i for i in letter]
# print(list1)
list2 = self.two_list_combin(list1, list2)
return list2
当然,此题还可以用DFS的方法。
class Solution(object):
def letterCombinations(self, digits):
"""
:type digits: str
:rtype: List[str]
"""
if not digits:
return []
dic = {2:'abc', 3:'def', 4:'ghi', 5:'jkl', 6:'mno', 7:'pqrs', 8:'tuv', 9:'wxyz'}
res = []
word = []
def DFS(cur):
if cur >= len(digits):
res.append(''.join(word))
else:
for i in dic[int(digits[cur])]:
word.append(i)
DFS(cur+1)
# print(word)
word.pop()#默认删掉最后一个元素
DFS(0)
return res