Легкий

Проблема

Учитывая неотрицательное целое число numRows, сгенерируйте первые numRows треугольника Паскаля.

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

Пример:

Input: 5
Output:
[
     [1],
    [1,1],
   [1,2,1],
  [1,3,3,1],
 [1,4,6,4,1]
]

Решение

Используйте подход динамического программирования. Мы не вычисляем значения рекурсивно, а используем информацию последнего уровня для вычисления информации текущего уровня.

Уравнение вычисления новой информации:

matrix[row][col] = matrix[row-1][col-1] + matrix[row-1][col]

Сложность

Строка 18 будет выполнена row — 2 раза, а значение row находится между 2 и n-1, где n равно numRows. Это означает, что строка 18 будет выполняться как 1+ 2 + … + (n-2) = O((n-2)*(n-1) / 2) = O(n²). Поэтому временная сложность составляет O(n²).

Кроме того, мы используем пространство O(n(n+1)/2) для сохранения результата, поэтому пространственная сложность также составляет O(n²).