又遇到了组合类的题,这种想都不用想,直接回溯伺候
算法过程
- 创建键盘分类数据
phone
, 用于查找键盘对应数据 - 回溯字符串
digits
并从phone
中提取数据 - 回溯过程:
- 以
23
为例,先遍历2,从phone
中获取数组[a,b,c]
,并将元素赋值给letter
- 此时
letter
为a
, 与上一轮拼接成的字符串conbition
拼接, 并继续回溯3
- 此时分成三条线:
a, b, c
分别取拼接d,e,f
- 然后看
digits
的遍历状态,如果到末尾了,说明单层的遍历结束了,将拼接后的结果放入到结果res
中
- 此时分成三条线:
- 然后如此往复
- 以
- 最后返回
res
代码
class Solution:
def letterCombinations(self, digits: str) -> List[str]:
if not digits: return []
phone = { "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']}
def backtrack(conbition, next):
if len(next) == 0: res.append(conbition)
else:
for letter in phone[next[0]]:
backtrack(conbition + letter, next[1:])
res = []
backtrack('', digits)
return res