查看: 690| 回复: 1
跳转到指定楼层
上一主题 下一主题
收起左侧

[Leetcode] 求指导递归return的盲点 (LC 211)

全局:

注册一亩三分地论坛,查看更多干货!

您需要 登录 才可以下载或查看附件。没有帐号?注册账号

x
本帖最后由 yoloblah 于 2022-3-3 02:46 编辑

大家好,lz的递归不是很好,所以做的题目比较少,但DFS常常吃了闷亏,看来看去不知道到底原因是什麽,只能死记知道这样能过,这样不能过,
求大老解释下,谢谢
题目是LeetCode 211. Design Add and Search Words Data Structure ,应该是Trie方面的题目
但在搜寻的地方为了避免TLE,我想利用DFS的方式
我的代码如下:
  1. from collections import defaultdict
  2. class TrieNode:
  3.     def __init__(self):
  4.         self.children = defaultdict(TrieNode)
  5.         self.isWord = False

  6. class WordDictionary:
  7.     def __init__(self):
  8.         self.root = TrieNode()

  9.     def addWord(self, word: str) -> None:
  10.         node = self.root
  11.         for w in word:
  12.             node = node.children[w]
  13.             node.isWord = True

  14.     def search(self, word: str) -> bool:
  15.         node = self.root
  16.         
  17.     def dfs(node, word):
  18.         for idx, w in enumerate(word):
  19.             if w == '.':
  20.                 for c in node.children:
  21.                     if dfs(node.children[c], word[idx+1:]):
  22.                         return True
  23.                 return False
  24.             else:
  25.                 if w in node.children:
  26.                     node = node.children[w]
  27.                 else:
  28.                     return False
  29.         return node.isWord
  30.     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观念不好,请鞭小力些,谢谢




评分

参与人数 1大米 +6 收起 理由
14417335 + 6 给你点个赞!

查看全部评分


上一篇:LeetCode面经看到description,求问类似题目
下一篇:寻找刷题小伙伴
全局:
1. 因为正确的逻辑是要遍历完node.children, 如果全是false,才return false,遇到了第一个True就return True.
按照你的写法,你这个for loop根本跑不起来,return的是node.children的一个c 的dfs结果
记住一旦触发return,function就结束了
2. 你的主function也得return东西啊,不然结果是None

非专业选手,表述不准确请轻喷

评分

参与人数 1大米 +3 收起 理由
14417335 + 3 给你点个赞!

查看全部评分

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册账号
隐私提醒:
  • ☑ 禁止发布广告,拉群,贴个人联系方式:找人请去🔗同学同事飞友,拉群请去🔗拉群结伴,广告请去🔗跳蚤市场,和 🔗租房广告|找室友
  • ☑ 论坛内容在发帖 30 分钟内可以编辑,过后则不能删帖。为防止被骚扰甚至人肉,不要公开留微信等联系方式,如有需求请以论坛私信方式发送。
  • ☑ 干货版块可免费使用 🔗超级匿名:面经(美国面经、中国面经、数科面经、PM面经),抖包袱(美国、中国)和录取汇报、定位选校版
  • ☑ 查阅全站 🔗各种匿名方法

本版积分规则

>
快速回复 返回顶部 返回列表