题目描述:
题解:
1.用map digtostr保存每个数字对应的字符
2.输入digits中有diglen个数字,result保存组合结果初始化为空
3.对digits中每个数字找到对应字符,当处理第一个数字时,将数字对应字符保存在result,处理后续数字时,将字符保存在str_list
4.将result中每个元素与str_list组合保存在tmp中,并对result更新
5.算法主要思想是随着数字的读取不断更新result
def letterCombinations(self, digits): diglen = len(digits) digtostr = {"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"]} result = [] for i in range(diglen): if i==0: result = digtostr[digits[i]] else: str_list = digtostr[digits[i]] tem = [] for res in result: for str in str_list: tem.append(res+str) result = tem return result
2021.11.09:
学习回溯算法的时候再次遇到这个题,采用回溯,其实也就是DFS方法题解如下:
1.同样使用一个dict结构保存数字到字符的对应,result保存最终的结果。
2.定义一个DFS函数,输入resstr保存当前匹配出的字符串,idx表示匹配到digits第几个。如果idx与digits长度相等,说明已经完成转换,将resstr加入result。否则以此将当前idx代表的数字所对应的字符加入resres中,然后idx+1继续调用DFS。
class Solution(object): def letterCombinations(self, digits): digtostr = {'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']} result = [] numbers = len(digits) if digits=="": return result def dfs(resstr,idx): if idx == numbers: result.append(resstr) return digit = digits[idx] strs = digtostr[digit] for str in strs: dfs(resstr+str,idx+1) dfs('',0) return result