题目描述
解题思路
解法一:
python代码
class Solution:
def letterCombinations(self, digits: str) -> List[str]:
hash = {'1':"", '2':"abc", '3':"def", '4':"ghi", '5':"jkl", '6':"mno", '7':"pqrs", '8':"tuv", '9':"wxyz"}
if len(digits) == 0:
return []
product = ['']
for i in digits:
res = []
for j in product:
for k in hash[i]:
res.append(j+k)
product = res
return product
解法二:回溯法
“回溯”指的是“状态重置”,思想是通过枚举所有可能的情况来找到所有解。如果一个候选解被发现并不是可行解,那就舍弃,回到前面的步骤对其进行修改,重新尝试找到新条件的可行解。
可理解为:通过回溯前的选择和回溯后的撤销来求出相应结果集的一个过程。
全排列的题目一般用回溯思想解决
本题以digits=“23”为例
python代码
class Solution(object):
def letterCombinations(self, digits):
if len(digits) == 0:
return []
d = {1: "", 2: "abc", 3: "def", 4: "ghi", 5: "jkl", 6: "mno", 7: "pqrs", 8: "tuv", 9: "wxyz"}
res = []
track = []
# digits,0,d:三个参数共同确定可以选择的列表
self.dfs(digits, 0, track, res, d)
return res
def dfs(self, digits, index, path, res, d):
if len(path) == len(digits):
res.append("".join(path))
return
digit = int(digits[index]) # // 获取第i位数字
# 获取第i为数字对应的各个字母
for c in d[digit]:
path.append(c)
self.dfs(digits, index + 1, path, res, d)
path.pop()
if __name__ == '__main__':
s = Solution()
# res = s.letterCombinations("23")
res = s.letterCombinations("5678")
print(res)