深度优先遍历
class Solution:
def letterCombinations(self, digits: str):
NumDict = {'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 backtracking():
if len(path) == len(digits):
res.append(''.join(path))
return
c = digits[len(path)]
for i in NumDict[c]:
path.append(i)
backtracking()
path.pop()
path = list()
res = list()
if not digits:
return res
backtracking()
return res
总结
1、题目描述,根据数字字符串,输出对应字符的组合,n个数字对应组合的字符个数为n,最后将全部组合置于列表中。
2、面对寻找所有的可行解的题目,可以选择回溯算法(深度优先遍历、广度优先遍历),代码通过函数递归实现回溯算法。
3、代码中,在执行完成backtracking()
的内容后,使用path.pop()
删除path列表的最后一个元素,目的是完成剩余的深度优先遍历过程。