由买买提看人间百态

boards

本页内容为未名空间相应帖子的节选和存档,一周内的贴子最多显示50字,超过一周显示500字 访问原贴
JobHunting版 - java初学者问到leetcode sum root to leaf题
相关主题
leetcode 运行结果和eclipse不一样???问一个题目
麻烦大家帮看看这段代码的问题Time complexity
渣渣cs本科半应届如何找工作请教这么一个题:BST maximum sum path
为啥有两个case不对??Binary Tree Maximum Path SumUni_value subtree problem
flattern binary tree to linked list (leetcode)贴个自己的答案:Binary Tree Max Path Sum
path sum II OJ 超时这最小公共父母节点有bug吗?
Interview question::关于leetcode上的一道题
GOOG ONSITE 面试大家帮忙看看 问题在哪啊?由preorder 来建 bst,为什么后面没
相关话题的讨论汇总
话题: sumhelp话题: sum话题: int话题: root话题: null
进入JobHunting版参与讨论
1 (共1页)
k****r
发帖数: 807
1
这道题当时c++时简单的就实现了,但是类似的,我用java就不对,具体代码是这样的
public class Solution {
public int sumNumbers(TreeNode root) {
int result = 0;
int tmp = 0;
sumHelp(root, tmp, result);
return result;
}
private void sumHelp(TreeNode root, int tmp, int sum){
if (root == null) return;
if (root.left == null && root.right == null){
int newone = tmp + root.val;
sum = sum + newone;
}
if (root.right != null) sumHelp(root.right, (tmp + root.val)*10, sum
);
if (root.left != null) sumHelp(root.left, (tmp + root.val)*10, sum);
return;
}
}
但为什么这样就对呢:
public class Solution {
public int sumNumbers(TreeNode root) {
int result = 0;
return sumHelp(root, result);
}
private int sumHelp(TreeNode root, int sum){
if (root == null) return 0;
int res = sum*10 + root.val;
if (root.left == null && root.right == null){
return res;
}
return (sumHelp(root.left, res) + sumHelp(root.right, res));
}
}
b******g
发帖数: 3616
2
完全不懂java的人表示第一段code貌似是按C++的写法把返回结果放在输入参数的sum里
?但是似乎听说java是pass-by-value。。。。
z*******3
发帖数: 13709
3
建议把java教材看一遍,java没有那么难,但是也没有那么简单
尤其是对于c++转行的程序员来说,c那种控制内存的习惯还会增加难度
这题楼上说得差不多,java里面所有的基础类型
在作为方法参数传入的时候,是值拷贝
而不是拷贝地址,因为你传的不是对象
所以拷贝的就是value,而不是reference
所以return必需返回一个value,然后赋值给另外一个变量
要理解这个,把stack&heap好好看看
其实拷贝的都是stack里面的value
只不过primitive type在stack里面存的是value
而一般对象存的是reference
k****r
发帖数: 807
4
谢谢ls的回复,我确实应该再好好看看java书。
by value,
所以说,第一段代码里的 sum = sum + newone;就不可会把改变了的sum值带到调用这
次recursion之外了吗?
如果是这样,我记得之前自己写了一个List>为入参的一个例子,好像
用的 add()可以带出来,不知道怎么回事。
z*******3
发帖数: 13709
5
list是对象,存的是reference
你这里sum是primitive type

【在 k****r 的大作中提到】
: 谢谢ls的回复,我确实应该再好好看看java书。
: by value,
: 所以说,第一段代码里的 sum = sum + newone;就不可会把改变了的sum值带到调用这
: 次recursion之外了吗?
: 如果是这样,我记得之前自己写了一个List>为入参的一个例子,好像
: 用的 add()可以带出来,不知道怎么回事。

k****r
发帖数: 807
6
哦了,原来primitive type和对象有这样的区别啊,学习了,谢谢。

【在 z*******3 的大作中提到】
: list是对象,存的是reference
: 你这里sum是primitive type

n*****n
发帖数: 5277
7
primitive type 不能做引用传递
w********1
发帖数: 3
8
java primitive type传的是值的copy,其他java object type传的是引用的copy
1 (共1页)
进入JobHunting版参与讨论
相关主题
大家帮忙看看 问题在哪啊?由preorder 来建 bst,为什么后面没flattern binary tree to linked list (leetcode)
大虾帮忙看看代码,为什么 res参数传入不了,返回总是nullpath sum II OJ 超时
问题在哪儿啊 kth Node of BST,大家帮忙Interview question::
check if a binary tree is a valid binary search treeGOOG ONSITE 面试
leetcode 运行结果和eclipse不一样???问一个题目
麻烦大家帮看看这段代码的问题Time complexity
渣渣cs本科半应届如何找工作请教这么一个题:BST maximum sum path
为啥有两个case不对??Binary Tree Maximum Path SumUni_value subtree problem
相关话题的讨论汇总
话题: sumhelp话题: sum话题: int话题: root话题: null