
又遇到了组合类的题,这种想都不用想,直接回溯伺候
算法过程
- 创建键盘分类数据
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