Треугольник Паскаля

Треугольник Паскаля

Easy JS

Дано целое число rowIndex - индекс строки в треугольнике. Нужно вернуть массив чисел, который соответсвует строке в треугольника Паскаля.

В треугольнике Паскаля каждое число является суммой двух чисел над ним.


Пример 1:

Ввод: rowIndex = 1
Вывод: [1, 1]

Пример 2:

Ввод: rowIndex = 0
Вывод: [1]

Пример 3:

Ввод: rowIndex = 4
Вывод: [1, 4, 6, 4, 1]

Решение

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


  1. Начинаем перебор с самого первого элемента и до заданного rowIndex;
  2. На каждом шаге добавляем одну единицу в массив, т.к. треугольник должен начинаться и заканчивается на 1;
  3. Для первых дух строк треугольника ([1] и [1,1]) нам не нужно никаких дополнительных манипуляций, следовательно, пропускаем цикл на 6 строке, если i меньше 2.
  4. Если i равен или больше 3, то подключаем дополнительную логику генерации строк. Рассмотрим подробнее на примере. Допустим, в цикле на 3 строке i = 2, следовательно, при входе в цикл на 6 строке result = [1, 1, 1], а j = 1 (2 - 1). Вычисление на 7 строке будет выглядеть так: result[1] = 1 + 1, где первое слагаемое это левое число над текущим, а второе - правое. Еще немного примеров. Массив [ 1, 2, 1, 1 ] после цикла на 6-8 строках превратится в [ 1, 3, 3, 1 ], а [ 1, 3, 3, 1, 1 ] в [ 1, 4, 6, 4, 1 ] и так далее.

Код решения в виде текста

/**
 * @param {number} rowIndex
 * @return {number[]}
 */
function getRow(rowIndex) {
  let result = [];
  for (let i = 0; i <= rowIndex; i++) {
    result.push(1)

    for (let j = i - 1; j > 0; j--) {
      result[j] = result[j - 1] + result[j]
    }
  }

  return result;
}

Больше интересных разборов в канале @js_is_easy, подписывайся

Report Page