Я делаю leetcode и запутался, потому что результат depth ++ и depth + 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 + 1
и depth++
вне функцией? Серьезно, вы можете сами ответить на этот вопрос.
depth++
увеличивает depth
после вызова. Это оператор приращения Почта. Вы можете сделать ++depth
, чтобы получить результаты, эквивалентные depth + 1
Но пока мы отвечаем здесь, обратите внимание, что, хотя ++depth
будет оценивать тот же результат, что и depth + 1
, но они также не эквивалентны, потому что первый вызывает побочный эффект на depth
, которого нет у второго.
глубина ++ - это то же самое, что и depth=depth+1
. Оператор инкремента изменит и вернет копию старого depth
.
int x = depth;
depth = depth+1;
return x;
Операция глубина + 1 вернет значение выражения без каких-либо изменений.
return depth+1;
если вы используете инкремент поста с присваиванием
int a=1;
a = a++;
если вы используете инкремент поста без присваивания
int x=1;
x++;
Оператор приращения ПочтаvarName++
использует значение Текущий, тогда увеличивает переменную, тогда продолжает выполнение остальной части оператора.
Если вы использовали оператор приращения предварительно++varName
, первый вызов будет работать так же, как и с depth + 1
, но оставит переменную увеличенной, требуя, чтобы ее использование следующий учитывало это:
dfs(root.right, res, ++depth); // increment before using value
dfs(root.left, res, depth); // depth already incremented
Хотя это приведет к очень небольшому быстрому выполнению из-за исключения одной арифметической операции, код труднее читать и может привести к ошибкам, если будет добавлен дополнительный код, который не ожидал изменения depth
в методе.
Некоторые считают изменение значения параметров метода плохим стилем, хотя это руководство по стилю не является общепринятым в качестве наилучшей практики.
depth + 1
и depth++
совпадают по результату, но способ их исполнения отличается.
depth = depth + 1
применяет результаты расчета к следующей операции.
depth++
Сначала выполняет операцию над значением предварительного добавления, а затем добавляет единицу.
depth++;
добавление является "почтовой" операцией.++depth;
и он "пред". Вот почему они называются операторами инкремента «пост» и «до».