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

[树/链表/图] 什么时候用 helper function?

🔗
H1g | 只看该作者 |倒序浏览
全局:

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

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

x
本帖最后由 H1g 于 2022-4-20 16:33 编辑

最近刚开始刷题,以一个简单的题举例,LC 108. Convert Sorted Array to Binary Search Tree
lc sample solution: 使用 helper
  1. <span style="background-color: rgb(247, 247, 247);">    def sortedArrayToBST(self, nums: List[int]) -> Optional[TreeNode]:</span>
复制代码
  1.     def sortedArrayToBST(self, num):
  2.         if not num:
  3.             return None

  4.         mid = len(num) // 2

  5.         root = TreeNode(num[mid])
  6.         root.left = self.sortedArrayToBST(num[:mid])
  7.         root.right = self.sortedArrayToBST(num[mid+1:])

  8.         return root
复制代码
我自己写的话应该是用第二种写法,但是答案引入了 helper function,为什么,有什么好处?
更 general 一点来说的话,什么情况要使用 helper function?



评分

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

查看全部评分


上一篇:我和同学面试都遇到了-赛 狗狗 题 分 享
下一篇:整理了常见语言的运算优先级
推荐
Dizy 2022-4-21 05:34:38 | 只看该作者
全局:
Recursive call 的用 helper function 很常见,因为通常你的 function signature 和 solution 要求的 function signature 并不一致,这时候你可能就不得不定义一个 helper function 来做 recursive call.
当然这只是其中一种情况,当你发现代码重复的时候,可能也要考虑是否能抽象出 function 了 (which is exactly what functions, structures, classes, templates are for --- abstractions)。
回复

使用道具 举报

🔗
 楼主| H1g 2022-4-21 04:34:16 | 只看该作者
全局:
使用 helper 的折叠没了,再贴一下
  1.     def sortedArrayToBST(self, nums: List[int]) -> Optional[TreeNode]:
  2.         def helper(left, right):
  3.             if left > right:
  4.                 return None
  5.             mid = left + (right - left) // 2
  6.             root = TreeNode(nums[mid])
  7.             root.left = helper(left, mid - 1)
  8.             root.right = helper(mid + 1, right)
  9.             return root
  10.         return helper(0, len(nums) - 1)
复制代码
回复

使用道具 举报

🔗
spiritcat 2022-4-26 03:23:33 | 只看该作者
全局:
这道题按照你的写法可能有数组复制的开销,当然这个可能被解释器优化掉
回复

使用道具 举报

🔗
akdhfikbk 2022-4-30 08:18:35 | 只看该作者
全局:
程序能decouple多散就多decouple多散
最忌讳所有程序都在同一个function里面,python尤甚
便于阅读和后期扩展
建议楼主过一遍clean code,上面都是些编码规范
回复

使用道具 举报

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

本版积分规则

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