Leetcode17:电话号码的字母组合——回溯
目录
题目
https://leetcode-cn.com/problems/letter-combinations-of-a-phone-number/
终于能自己做出一道题了😭,之前的回溯题没白刷
题解
回溯
思路:先用哈希表储存数字对应的字母,然后用回溯法记录搜索路径。
画个图帮助理解:
代码:
class Solution:
def letterCombinations(self, digits: str) -> List[str]:
if digits=="":
return []
tel = {"2":"abc","3":"def","4":"ghi","5":"jkl","6":"mno","7":"pqrs","8":"tuv","9":"wxyz"}
size = len(digits)
path = []
res = []
def backtracking(i, path, res):
for letter in tel[digits[i]]:
path.append(letter)
if i==size-1:
res.append("".join(path))
path.pop()
else:
backtracking(i+1, path, res)
path.pop()
backtracking(0, path, res)
return res
时间复杂度:O(3^m * 4^n),m是电话键盘上有三个字母对应的数的个数,n是电话键盘上有四个字母对应的数的个数。需要遍历一遍所有的组合。
空间复杂度:O(m+n),主要为记录路径的开销,路径最长也只有len(digits)