题目

解题
分析
- 构造合适的对象存储数据
 - 对问题 进行归类 适合那种方式解
 - 返回所有组合问题 也可以认为是路径相关, 算是全排列问题 应该可以回溯
 
回溯的模板如下
def backtrack(路径, 选择列表):
    if 满足结束条件:
        result.add(路径)
        return
    
    for 选择 in 选择列表:
        做选择
        backtrack(路径, 选择列表)
        撤销选择
def solution(digits: list):
    KEY = {'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']}
    rsts = []
    def backtrace(path, chooise_list):
        if len(chooise_list)==0:
            rsts.append(path)
        else:
            for path_chooice in KEY[chooise_list[0]]:
                backtrace(path+path_chooice,chooise_list[1:])
    if digits:
        backtrace("", digits)
    return rsts