环境:python3.7.3,win10
源自LeetCode第17题:电话号码的字母组合
其中一个递归解法是这样的,这个没问题
def letterCombinations(self, digits: str) -> List[str]:
#外部循环时间复杂度为O(n),递归时间复杂度O(logN),空间复杂度为O(n)
d = {'2':'abc', '3':'def', '4':'ghi', '5':'jkl', '6':'mno', '7':'pqrs', '8':'tuv', '9':'wxyz'}
if not digits: return []
tmp = []
for s in digits:
if s in d:
tmp.append(d[s])
result = []
def dfs(s, tmp):
if not tmp:
result.append(s)
return
for i in tmp[0]:
dfs(s + i, tmp[1:])
dfs('', tmp)
return result
我想着pop()比切片性能高,于是就改了一下dfs函数的for循环
def letterCombinations(digits):
#外部循环时间复杂度为O(n),递归时间复杂度O(logN),空间复杂度为O(n)
d = {'2':'abc', '3':'def', '4':'ghi', '5':'jkl', '6':'mno', '7':'pqrs', '8':'tuv', '9':'wxyz'}
if not digits: return []
tmp = []
for s in digits:
if s in d:
tmp.append(d[s])
result = []
def dfs(s, tmp):
if not tmp:
print(tmp)
result.append(s)
return 0
for i in tmp[len(tmp) - 1]:
print(tmp)
tmp.pop()
dfs(s + i, tmp)
dfs('', tmp)
return result
print(letterCombinations('23'))
但是,惊人的事情发生了
报错