Ребята, у вас был отличный четверг?? Дайте мне знать, если вам трудно отслеживать, какой сегодня день, потому что каждый день кажется выходным из-за карантина. В любом случае, с завтрашнего дня я буду делать два раздела в своих постах, так как заметил, что некоторые из моих зрителей мало что знают о программировании. Если у вас есть предварительные знания о структурах данных и вы знакомы с ними, не стесняйтесь перейти к моменту, когда я начну решать проблему алгоритма, в противном случае я буду рассматривать одну структуру данных в каждом посте в течение следующих нескольких дней.

Однако сегодня нам нужно сделать функцию, которая вызывается с целым числом в качестве входных данных. Функция вернет такое же количество строк треугольника Паскаля, как массивы внутри большего массива. Я покажу вам пример:

generate(5);
//function returns
[
     [1],
    [1,1],
   [1,2,1],
  [1,3,3,1],
 [1,4,6,4,1]
]

Я попытался придумать рекурсивное решение, потому что знаю, что для создания алгоритма, который строит последовательность Фибоначчи, это очень выполнимо, однако это оказалось довольно сложно. Поэтому я решил изменить свой подход к итеративному решению. Я начал с базового случая, когда, если входное целое число было равно 0, функция возвращала пустой массив.

Затем я повторяю столько, сколько входное целое число, поэтому в приведенном выше примере я бы повторил пять раз. Во время итерации я знаю, что первая и последняя записи каждого подмассива должны быть одним, поэтому я бы закодировал это так:

res[i] = new Array(i + 1);
res[i][0] = res[i][i] = 1;

Я знаю, что после первого и второго подмассивов мне придется добавить значения, отличные от одного, поэтому я поместил еще один цикл for внутри исходного цикла.

for(let j = 1; j < i; j++){
    res[i][j] = res[i - 1][j-1] + res[i - 1][j];
}

Я провел некоторые математические вычисления, чтобы выяснить, что res[i][j] будет равно уравнениям в приведенном выше коде. Затем я возвращаю массив результатов с правильным количеством строк. Итак, полное решение:

var generate = function(numRows) {
        if(numRows === 0) return [];
    let res = [];
     
    for(let i = 0; i < numRows;i++){
        res[i] = new Array(i + 1);
        res[i][0] = res[i][i] = 1;
        
        for(let j = 1; j < i; j++){
            res[i][j] = res[i - 1][j-1] + res[i - 1][j];
        }
    }
    return res;
};

Дайте мне знать, если у вас, ребята, есть какие-либо вопросы или вы узнали что-нибудь, спасибо!