#javascript
#javascript
Вопрос:
Я видел вопрос в leetcode.
Кроме того, я нашел в нем решение.
И одна вещь, которую я не понимаю, — это эта строка кода
while(n-- >1)
Кто-нибудь может объяснить —> значение?
Вот JS:
var countAndSay = function(n) {
var result = "1";
var prev;
var count;
var tmp;
while (n-- > 1) {
prev = result[0];
count = 1;
tmp = [];
for (var i = 1; i < result.length; i ) {
if (prev === result[i]) {
count ;
} else {
tmp.push(count, prev);
prev = result[i];
count = 1;
}
}
tmp.push(count, prev);
result = tmp.join("");
}
return resu<
};
console.log(countAndSay(4))
И последнее, не мог бы кто-нибудь объяснить, в чем смысл этого вопроса.
Я все еще не понимаю, почему 2 равно 11,3, 21,4 равно 1211, а 5 равно 111221.
Комментарии:
1. Выражение вычисляется как
(n--) > 1
.n
уменьшается на единицу, и результат сравнивается с1
. Что касается вопроса: en.wikipedia.org/wiki/Look-and-say_sequence2. @FelixKling просто для ясности n— > 1 сначала сравнивает n и 1, затем уменьшает n на 1
3. @ChrisLi: И да, и нет.
n--
возвращает старое значениеn
, поэтому мы используем старое значение для сравнения, ноn
оно все равно уменьшается перед сравнением. Но в моем комментарии, безусловно, отсутствует эта информация.4. Я все еще не понимаю, почему 2 равно 11,3, 21,4 равно 1211, а 5 равно 111221. В этом вся суть вопроса. Смотрите подсказки в вопросе, чтобы понять. Ответ на этот вопрос содержит ключ к получению решения. Итак, попробуйте еще раз прочитать вопрос и подсказки.
Ответ №1:
Выражение
n-- > 1
означает: вычтите единицу из n
и проверьте, было ли ее значение больше 1 до вычитания.
while (n-- > 1) {
// rest of the code
эквивалентно
while (true) {
if (n > 1) {
n--;
// rest of the code
} else {
// n is decremented regardless:
n--;
// initial condition was not fulfilled:
break;
}
Или с отрицанием условия:
while (true) {
const origN = n;
n--;
if (!(origN > 1)) {
break;
}
// rest of the code
Комментарии:
1. У меня здесь есть запрос, сравнение производится с уменьшенным значением n или значение уменьшается после сравнения?
2. Сравнение производится со значением перед вычитанием; значение уменьшается после вычитания, как в последнем блоке кода.
3. «значение уменьшается после вычитания» … Я полагаю, вы имели в виду «значение уменьшается после сравнения».
4. Не беспокойтесь. Что касается вашего ответа, вы написали
if (n > 1) break;
, но разве это не должно бытьif (n <= 1) break
или дажеif (n === 1) break
?
Ответ №2:
Это означает, что вы проверяете, больше ли n 1, и после этого уменьшаете n на 1.
Ответ №3:
Это означает, вычтите 1 из n
и проверьте, больше ли результат 1.
n--
в любой части кода эквивалентно n = n - 1
, или `n -= 1`, в этом цикле является согласованным способом вычитания и вычисления.
Ответ №4:
Выражение (n-- > 1)
аналогично сравнению значения, n
большего 1. Но вы должны заметить, что значение n не будет уменьшено (в начале) при сравнении здесь. Это потому, что значение n сначала сравнивается с 1, только после этого значение n уменьшается. Чтобы четко понять это, вы можете взглянуть на это.
function test(name) {
var n = 5;
while (n-- == 5) { //Here the decrement doesn't takes places so it gets inside the block
console.log(n); //This statement returns the value of n as 4.
}
}
const testing = new test();