- bfs解法: 每次计数queue中的长度n,pop(0) n次获得cur,把可能的字符加到cur中,再append到queue中。
def letterCombinations(self, digits):
"""
:type digits: str
:rtype: List[str]
"""
if len(digits) == 0:
return []
kv = {"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"]}
queue = [""]
for digit in digits:
n = len(queue)
for i in range(n):
cur = queue.pop(0)
if digit in kv:
for val in kv[digit]:
queue.append(cur + val)
return queue
- dfs解法: 变量为idx(表示当前要处理的index)和cur(表示当前已经组成的字符串)
def letterCombinations(self, digits):
"""
:type digits: str
:rtype: List[str]
"""
if len(digits) == 0:
return []
kv = {"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"]}
self.res = []
self.dfs("", 0, digits, kv)
return self.res
def dfs(self, cur, idx, digits, kv):
if len(cur) == len(digits):
self.res.append(cur)
return
for val in kv[digits[idx]]:
cur += val
self.dfs(cur, idx + 1, digits, kv)
cur = cur[:-1]
网友评论