注册一亩三分地论坛,查看更多干货!
您需要 登录 才可以下载或查看附件。没有帐号?注册账号 
x
本帖最后由 yoloblah 于 2022-3-3 02:46 编辑
大家好,lz的递归不是很好,所以做的题目比较少,但DFS常常吃了闷亏,看来看去不知道到底原因是什麽,只能死记知道这样能过,这样不能过,
求大老解释下,谢谢
题目是LeetCode 211. Design Add and Search Words Data Structure ,应该是Trie方面的题目
但在搜寻的地方为了避免TLE,我想利用DFS的方式
我的代码如下:- from collections import defaultdict
- class TrieNode:
- def __init__(self):
- self.children = defaultdict(TrieNode)
- self.isWord = False
- class WordDictionary:
- def __init__(self):
- self.root = TrieNode()
- def addWord(self, word: str) -> None:
- node = self.root
- for w in word:
- node = node.children[w]
- node.isWord = True
- def search(self, word: str) -> bool:
- node = self.root
-
- def dfs(node, word):
- for idx, w in enumerate(word):
- if w == '.':
- for c in node.children:
- if dfs(node.children[c], word[idx+1:]):
- return True
- return False
- else:
- if w in node.children:
- node = node.children[w]
- else:
- return False
- return node.isWord
- return (dfs(node, word))
复制代码 Runtime: 13052 ms, faster than 11.97% of Python3 online submissions for Design Add and Search Words Data Structure.
Memory Usage: 80.3 MB, less than 5.56% of Python3 online submissions for Design Add and Search Words Data Structure.
效率奇差,但这可能不是本文主要问题,主要是想问递归观念
想询问的有两处
1. 24~25行,if dfs(node.children[c], word[idx+1:]):
return True
这段代码,本来的想法是单行的 return dfs(node.children[c], word[idx+1:]),但这样会错几个测资,想请问这样为什麽不行?
不一样是在dfs()有return True时候return True, 而dfs() return False的时候return False嘛?
哪裡不一样了?
2. 33行,return (dfs(node, word))
这段代码,本来是只想dfs(node, word),感觉只要呼叫dfs这个副程式就可以了,结果也会错,为什麽这边一定要return dfs()才会对呢?
求指教,可能lz观念不好,请鞭小力些,谢谢
|