依旧使用回溯算法
def letterCombinations(self, digits: str) -> List[str]:
c = {2:['a', 'b', 'c'],
3:['d', 'e', 'f'],
4:['g', 'h', 'i'],
5:['j', 'k', 'l'],
6:['m', 'n', 'o'],
7:['p', 'q', 'r', 's'],
8:['t', 'u', 'v'],
9:['w', 'x', 'y', 'z'],}
path = []
result = []
# start_k表示遍历到第几个数字,即数的深度
# s表示当前拼接字符串的长度
def backtracking(start_k, s):
if s == len(digits):
result.append(''.join(path))
return
for i in c[int(digits[start_k])]:
start_k += 1
path.append(i)
s += 1
backtracking(start_k, s)
# 回溯
path.pop()
s -= 1
start_k -= 1
return
if len(digits) == 0:
return []
backtracking(0, 0)
return result
有个小bug,就是当输入digits=''
时,返回['']
,但题目要求返回[]
。
感觉回溯算法的关键是搞清楚多叉树的深度和宽度代表什么,如下图所示: