1.电话号码的字母组合
示例 1:
输入:digits = “23”
输出:[“ad”,“ae”,“af”,“bd”,“be”,“bf”,“cd”,“ce”,“cf”]
示例 2:
输入:digits = “”
输出:[]
示例 3:
输入:digits = “2”
输出:[“a”,“b”,“c”]
class Solution:
def letterCombinations(self, digits: str) -> List[str]:
if not digits:
return []
n=len(digits)
phone={'2':'abc','3':'def','4':'ghi','5':'jkl','6':'mno','7':'pqrs','8':'tuv','9':'wxyz'}
ans=[]
def backtrack(i,tmp):
if i==n:
ans.append(tmp)
return
for letter in phone[digits[i]]
backtrack(i+1,tmp+letter)
backtrack(0,'')
return ans
今天在火车上,就做了这么一道题,脑子其实没那么灵光,光看懂理清楚这个逻辑就废了好大劲,我现在还是没有完全想明白这个tmp的逻辑,哦,想明白了,我刚才的疑问是,tmp为什么不是一个列表,而是一个元素呢,是因为每一次循环和迭代,只产生一个元素,所以不存在好多个元素的情况。
n目的是确定号码长度,phone是字典表,如何调用字典我还是要去查,ans是空答案,新函数进去了以后if先不看,因为这个是后面的操作,其实这个代码是个循环套循环,我完全可以把backtrack写成一个循环,而不是一个函数,当i=0的时候,phone就有两种选择,之所以为了选择字典就是因为,digits[i]出来是字符而不是数字,所以要用字典去找,letter就有了三种可能,然后其中一个去加一,然后再进行tmp+letter,循环,然后就有了各种情况。我好像说的不是很清楚,还是得自己想。过几天再练一下这个逻辑。