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"].
Use recursion to select only one element from each bucket.
class Solution(object):
def letterCombinations(self, digits):
if not digits:
return []
dic = {"2":"abc", "3":"def", "4":"ghi", "5":"jkl", "6":"mno", "7":"pqrs", "8":"tuv", "9":"wxyz"}
res=[]
self.helper(0,"",res,digits,dic)
return res
def helper(self,index,cur,res,digits,dic):
if len(cur)==len(digits):
res.append(cur)
return
for item in dic[digits[index]]:
self.helper(index+1,cur+item,res,digits,dic)
感觉这题可以总结个模板,如果要从多个list里面各选一个元素,那么
class Solution(object):
def combination_several_list(self,nums):
res=[]
self.helper(0,[],res,nums)
return res
def helper(self,index,cur,res,nums):
if len(cur)==len(nums):
res.append(cur[:])
return
for item in nums[index]:
self.helper(index+1,cur+[item],res,nums)
print(Solution().combination_several_list([[1,2,3],[4,5,6],[7,8,9]]))