我正在做leetcode,由于深度++和深度+1的结果完全不同,我陷入了这种困惑!我以前以为他们是一样的。有人能解释一下它们之间的区别吗?
private void dfs(TreeNode root, List<Integer> res, int depth) {
if (root == null) return;
if (res.size() == depth) {
res.add(root.val);
}
dfs(root.right, res, depth + 1); // depth++ would get different result
dfs(root.left, res, depth + 1);
}
深度++与depth=depth+1
相同。增量运算符将修改并返回旧depth
的副本。
int x = depth;
depth = depth+1;
return x;
depth+1操作将返回表达式的值,而不进行任何修改。
return depth+1;
如果您使用带有赋值的后增量
int a=1;
a = a++;
- 你可以这样想(a=a++=>a=a,然后a++(
- 现在,当我们在赋值期间和赋值之后赋值[a=a++]a=1时,a=2
如果您在没有分配的情况下使用后增量
int x=1;
x++;
- 现在赋值期间x=2,赋值后x=2
post增量运算符varName++
使用当前值,然后递增变量,继续执行语句的其余部分。
如果您使用前增量运算符++varName
,则第一个调用将与depth + 1
、一样工作,但将使变量保持增量,需要下一次使用它来将其考虑在内:
dfs(root.right, res, ++depth); // increment before using value
dfs(root.left, res, depth); // depth already incremented
尽管由于避免了1次算术运算,这将使代码的执行速度非常快,但代码更难读取,如果添加了更多不希望depth
在方法中发生变化的代码,则可能会导致错误。
一些人认为改变方法参数的值是一种糟糕的风格,尽管这种风格准则并没有被普遍接受为最佳实践。
depth + 1
和depth++
与结果相同,但执行方式不同。CCD_ 9将计算结果应用于下一操作。depth++
首先对预加法值进行运算,然后加一。