Что означает while (n- — > 1)?

#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_sequence

2. @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();