12
返回列表 发新帖
楼主: liuzz10
跳转到指定楼层
上一主题 下一主题
收起左侧

[树/链表/图] 129. Sum Root to Leaf Numbers 这道题有两行代码不是很懂

🔗
 楼主| liuzz10 2020-9-11 08:26:45 | 只看该作者
全局:
不知道小帅 发表于 2020-9-10 07:37
Java从来都是pass by value的,只不过这个value恰好是reference而已。
https://www.geeksforgeeks.org/g ...

不太能看懂C++。。。
你给的第一个例子,是说,reset之后arr=int[1]嘛?
回复

使用道具 举报

🔗
sdszilong 2020-9-11 08:34:07 | 只看该作者
全局:
pass by reference 和 pass by value,你还没理解透彻
回复

使用道具 举报

全局:
liuzz10 发表于 2020-09-10 17:26:45
不太能看懂C++。。。
你给的第一个例子,是说,reset之后arr=int嘛?
其实除了最后一个我写的都是Java。这个reset对调用reset的函数里面的arr没有任何影响。就是除了primitive type以外,Java存储某个object存的是reference(类似于这个object的地址) ,在函数过程中改变这个object相当于在全局进行改变。不过如果重新赋值就不会改变原来的object。举个linked list的例子。
Node a = head;
a. val = 3;
这样的话会改变head. val。但是如果
a = head. next,就不会改变这个list,只是改变了a的指向。
回复

使用道具 举报

全局:
liuzz10 发表于 2020-09-10 17:20:47
这个讲解太赞了,研究了好一会儿。。。
Permutations这道题我明白了说path自始至终只有一个,因为每次返回上一级都要remove last,所以当回到node的时候就空了。
这是说明返回
讲真,国服题解质量其实比美服要高一些。
回复

使用道具 举报

全局:
liuzz10 发表于 2020-09-10 17:20:47
这个讲解太赞了,研究了好一会儿。。。
Permutations这道题我明白了说path自始至终只有一个,因为每次返回上一级都要remove last,所以当回到node的时候就空了。
这是说明返回
如果喜欢做新题/周赛题 可以去国区讨论区找题解 世界服discuss一般讲解都不会太仔细而且对时间复杂度也不敏感 国服很多竞赛大神. 还可以关注些up主的频道 比如zerotrack(这个人经常写国服官方题解) lee215这些也会对contest题目进行讲解
回复

使用道具 举报

🔗
魔岩文化 2020-9-11 08:42:20 | 只看该作者
全局:
楼主你的这种写法看起来还是有点别扭的。
31、32行的这个左右子树的dfs其实也是backtracking的一种特殊形式。对于backtracking,一般的写法里面不会在31、32行这里new一个新的ArrayList,而是会在recursive call之后清除list最后的element。
那么区别就是在最后生成result的时候,要用new list添加。

  1.     public List<List<Integer>> pathSum(TreeNode root, int sum) {
  2.         List<List<Integer>> res = new ArrayList();
  3.         if(root == null) return res;
  4.         dfs(new ArrayList(), res, root, sum);
  5.         
  6.         return res;
  7.     }
  8.    
  9.     private void dfs(List<Integer> cur, List<List<Integer>> res, TreeNode root, int sum) {
  10.         if(root.left == null && root.right == null) {
  11.             if(sum == root.val) {
  12.                 cur.add(root.val);
  13.                 res.add(new ArrayList(cur));
  14.                 // This is needed!!!!
  15.                 cur.remove(cur.size() - 1);
  16.             } else return;
  17.         }
  18.         
  19.         if(root.left != null) {
  20.             cur.add(root.val);
  21.             dfs(cur, res, root.left, sum - root.val);
  22.             cur.remove(cur.size() - 1);
  23.         }
  24.         if(root.right != null) {
  25.             cur.add(root.val);
  26.             dfs(cur, res, root.right, sum - root.val);
  27.             cur.remove(cur.size() - 1);
  28.         }
  29.     }
复制代码
回复

使用道具 举报

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

本版积分规则

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