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

[树/链表/图] LC257一个Go的问题

全局:

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

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

x
LC257 https://leetcode.com/problems/binary-tree-paths/


一道简单题,我觉得我的解题思路没问题(源代码在最后)。但是不知道为啥在test case 188(如下图)时总是遇到bug



正确答案显然应该是 ["6->1->3->2","6->1->3->5->4"]

但是我的程序输出的是 ["6->1->3->5","6->1->3->5->4"]


最神奇的是,如果uncoment第21行打印*cur的值,正是答案所需的 [6 1 3 2] 和 [6 1 3 5 4]。但我不明白为啥append到res里面就变了呢😵 求大佬帮忙看看。回复必加米!先谢过了!



  1. /**
  2. * Definition for a binary tree node.
  3. * type TreeNode struct {
  4. *     Val int
  5. *     Left *TreeNode
  6. *     Right *TreeNode
  7. * }
  8. */
  9. func binaryTreePaths(root *TreeNode) []string {
  10.     s := make([]string, 0)
  11.     res := make([][]string, 0)
  12.    
  13.     var dfs func(*TreeNode, *[]string)
  14.     dfs = func(node *TreeNode, cur *[]string) {
  15.         if node==nil {
  16.             return
  17.         }

  18.         *cur = append(*cur, strconv.Itoa(node.Val))
  19.         if node.Left==nil && node.Right==nil {
  20.             //fmt.Println(*cur)
  21.             res = append(res, *cur)
  22.         }

  23.         dfs(node.Left, cur)
  24.         dfs(node.Right, cur)
  25.         *cur = (*cur)[:(len(*cur)-1)]
  26.     }
  27.    
  28.    
  29.     dfs(root, &s)
  30.     out := make([]string, len(res))
  31.    
  32.     //fmt.Println(res)
  33.     for i:=0; i<len(res); i++ {
  34.         out[i] = strings.Join(res[i], "->")
  35.     }
  36.    
  37.     return out
  38. }
复制代码



image.png (7.09 KB, 下载次数: 1)

image.png

上一篇:请教, 关于best time to buy and sell stock iv
下一篇:Leetcode#315: 大家帮忙看看
推荐
Yaxe 2020-9-29 08:58:31 来自APP | 只看该作者
全局:
因为res里存的就是cur本身 是引用  所以之后对2这个元素修改成5之后 第一个结果也会变
存之前深拷贝一份存进去就好了

评分

参与人数 1大米 +1 收起 理由
BobbyBear + 1 赞一个!

查看全部评分

回复

使用道具 举报

🔗
 楼主| BobbyBear 2020-9-29 09:34:59 来自APP | 只看该作者
全局:
Yaxe 发表于 2020-09-28 17:58:31
因为res里存的就是cur本身 是引用  所以之后对2这个元素修改成5之后 第一个结果也会变
存之前深拷贝一份存进去就好了
嗯,多谢回复。我明天去试一下。但是我怎么记得go里面的函数调用是pass by value呢?所以我一直以为append会把cur拷贝一份加到res里。看来我对go的理解还是不到位。
回复

使用道具 举报

🔗
 楼主| BobbyBear 2020-9-29 23:21:32 | 只看该作者
全局:
Yaxe 发表于 2020-9-29 08:58
因为res里存的就是cur本身 是引用  所以之后对2这个元素修改成5之后 第一个结果也会变
存之前深拷贝一份存 ...

今天去重新调试了一下,果然在append加了一个copy就对了。看来我对Go的理解还很不行啊。
回复

使用道具 举报

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

本版积分规则

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