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

[Leetcode] 真心请教地里xdjm关于leetcode内部solver的工作流程

全局:

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

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

x
本帖最后由 mambahang 于 2021-6-9 01:18 编辑

楼主目前转码刷题中,今天在刷leetcode的时候,自己定义的dfs作为一个method放在class solution下面,但是dfs里怎么都调用不了主函数下面的sefl.res变量。这不禁让我仔细审视了自己对于oop的理解,意识到刷题以来,所有的oop里关于method, self, variable scope的知识都来自之前上学零星的知识, 没有一个系统的理解。然后发现,leetcode每一题的答案,其实都是一个class solution, 但是楼主却没有找到  '__init__'.所以特来请教地里诸位:

1.leetcode在收到每一个solution后是怎么工作的,为什么class solution下面没有 __init__的初始化定义?
目前查阅网上回答,说是因为leetcode需要保持题目中一些变量的class,比如TreeNode。但是感觉自己理解的还不透彻。所以希望大家可以帮忙答疑一下。

2.楼主目前也意识到了问题的重要性,但是又说不上来自己的知识体系里缺少的是哪一块。不知道大家有没有推荐的相关资料或者干货视频,可以让楼主仔细理解学习,帮我补上自己缺少的知识。

在此先谢谢大家了。

忘了说: 编程语言是python。 再次感谢

上一篇:求助一道算法题
下一篇:转专业小白对刷题的困惑(回复加米!)
全局:
这个和OO好像没很大关系,self.res是一个实例变量,没有办法作为形参传进dfs的函数声明里面。解决办法也很简单,两种方法:在主函数里用self.res的话,在dfs()里面没必要再加这个参数进去,可以直接在dfs函数里面使用self.res。这样在主函数里调用执行dfs()后self.res会直接做相应修改。
第二种方法更普遍/合理一些:在主方法里不要用self.res这样的实例变量,用一个普通实参res = []。然后dfs()方法里面也加上res这样一个形参(请注意主方法里的res和dfs()形参res是不同含义),然后主方法调用的时候正常调用就可以了。
第二种方法在backtrack中会大量遇到,因为这类题的解题模板大致相同,都是用dfs的方法对主函数的res进行赋值
回复

使用道具 举报

全局:
lkean9 发表于 2021-06-08 12:10:13
这个和OO好像没很大关系,self.res是一个实例变量,没有办法作为形参传进dfs的函数声明里面。解决办法也很简单,两种方法:在主函数里用self.res的话,在dfs()里面没必要再加这个参数进去
对的 我今天就做了一道DFS 其实就是LC每日一题 我觉得还是个写代码的规范性问题 主函数里不要用实例变量 定义普通实参就好了
回复

使用道具 举报

🔗
 楼主| mambahang 2021-6-9 10:27:53 | 只看该作者
全局:
lkean9 发表于 2021-6-9 03:10
这个和OO好像没很大关系,self.res是一个实例变量,没有办法作为形参传进dfs的函数声明里面。解决办法也很 ...

谢谢lkean回复!确实现在有这两种处理方法,而我采用的高赞解答显然是用的第一种,self.res是定义在leetcode提供的那个method下面。那可不可以理解为,对于任一个leetcode题目,leetcode官方定义的def XXX(): method 就是这个class的主函数?类似 __init__的存在呢?
从这一细节也意识到,形成自己解题风格的重要性。在以后的做题中,都采用第二种方法,用形参来传递,主函数里只用一个普通的实参。
回复

使用道具 举报

🔗
 楼主| mambahang 2021-6-9 10:31:36 | 只看该作者
全局:
一个绝望的学渣 发表于 2021-6-9 03:35
对的 我今天就做了一道DFS 其实就是LC每日一题 我觉得还是个写代码的规范性问题 主函数里不要用实例变量  ...

谢谢回复哈。想请教下,你这里说的主函数是不是就是leetcode每一题里系统给出的那个def XXXX()呢?
回复

使用道具 举报

全局:
__init__默认没有吧,如果你自己加一个应该也可以 然后会在主method之前被执行。正常流程应该是:
sln = Solution()
sln.twoSum()
回复

使用道具 举报

🔗
 楼主| mambahang 2021-6-9 11:46:28 | 只看该作者
全局:
xiaobeixin 发表于 2021-6-9 10:37
__init__默认没有吧,如果你自己加一个应该也可以 然后会在主method之前被执行。正常流程应该是:
sln = Sol ...

谢谢解答!我仔细想了下,之前纠结的问题可以归结为:
If an instance variable is not set in __init__() can it be referenced by a class method?”
答案是肯定的。所以不管leetcode提供的def XXX method 是不是 默认为__init__,只要是在method中定义的instance vanriable,都可以被其他method调用。果然讨论能让人思维开阔XD谢谢
回复

使用道具 举报

全局:
本帖最后由 一个绝望的学渣 于 2021-6-8 20:53 编辑
mambahang 发表于 2021-06-08 19:31:36
谢谢回复哈。想请教下,你这里说的主函数是不是就是leetcode每一题里系统给出的那个def XXXX()呢?

就是def xxx (self, ...)这个 算主函数

你也可以自己写其他函数啊 主函数调用就好了 我一般是这么做的
回复

使用道具 举报

🔗
 楼主| mambahang 2021-6-9 13:07:43 | 只看该作者
全局:
一个绝望的学渣 发表于 2021-6-9 12:40
就是def xxx (self, ...)这个 算主函数

你也可以自己写其他函数啊 主函数调用就好了 我一般是这么做 ...

好的,谢谢解答哈
回复

使用道具 举报

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

本版积分规则

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