Программа курса:
Разбор задачи: Треугольник Паскаля
Предложенный нами код решения:
def generate_tr(numRows):
"""
Генерирует первые numRows строк треугольника Паскаля.
:param numRows: Количество строк.
:return: Список списков, представляющих треугольник Паскаля.
"""
if numRows <= 0:
return []
triangle = [[1]] # Начинаем с первой строки
for i in range(1, numRows):
prev_row = triangle[-1] # Предыдущая строка
new_row = [1] # Первый элемент новой строки всегда 1
# Заполняем промежуточные элементы строки
for j in range(1, len(prev_row)):
new_row.append(prev_row[j - 1] + prev_row[j])
new_row.append(1) # Последний элемент новой строки всегда 1
triangle.append(new_row)
return triangleФункция generate_tr принимает одно целое число numRows и возвращает первые numRows строк треугольника Паскаля. Если numRows <= 0, функция возвращает пустой список.
1. Обработка базового случая
if numRows <= 0:
return []
Если входное значение numRows меньше или равно нулю, логически невозможно создать строки треугольника Паскаля. В таком случае возвращается пустой список.
2. Инициализация первой строки
triangle = [[1]] # Начинаем с первой строки
Треугольник Паскаля всегда начинается с первой строки, содержащей единственное число 1. Поэтому создается список triangle с начальным значением [[1]].
3. Основной цикл для генерации строк
for i in range(1, numRows):
Используем цикл, который начинается со второй строки (i = 1) и продолжается до строки с индексом numRows - 1. На каждой итерации создается новая строка треугольника.
4. Получение предыдущей строки
prev_row = triangle[-1]
Переменная prev_row сохраняет последнюю строку уже сгенерированного треугольника. Она используется для вычисления новой строки. В Python обращение triangle[-1] возвращает последний элемент списка.
5. Создание новой строки
new_row = [1]
Каждая строка треугольника Паскаля начинается с 1. Поэтому новая строка new_row инициализируется с единственным элементом [1].
6. Заполнение промежуточных элементов строки
for j in range(1, len(prev_row)):
new_row.append(prev_row[j - 1] + prev_row[j])
- Здесь выполняется итерация по индексам
jот1доlen(prev_row) - 1. - Каждый промежуточный элемент новой строки вычисляется как сумма двух чисел из предыдущей строки:
prev_row[j - 1]— левое число.prev_row[j]— правое число.
- Вычисленное значение добавляется в конец новой строки с помощью
new_row.append().
7. Добавление последнего элемента строки
new_row.append(1)
Последний элемент каждой строки треугольника Паскаля всегда равен 1. Этот элемент добавляется в конец строки new_row.
8. Добавление новой строки в треугольник
triangle.append(new_row)
После формирования строки new_row она добавляется в общий список triangle, который содержит все строки треугольника.
9. Возврат результата
return triangle
После завершения цикла функция возвращает весь треугольник Паскаля (список списков), содержащий numRows строк.
Пример работы функции
Вход: numRows = 5
Шаги работы функции:
- Инициализация:
triangle = [[1]] - Первая итерация:
prev_row = [1]new_row = [1, 1]triangle = [[1], [1, 1]]
- Вторая итерация:
prev_row = [1, 1]new_row = [1, 2, 1]triangle = [[1], [1, 1], [1, 2, 1]]
- Третья итерация:
prev_row = [1, 2, 1]new_row = [1, 3, 3, 1]triangle = [[1], [1, 1], [1, 2, 1], [1, 3, 3, 1]]
- Четвертая итерация:
prev_row = [1, 3, 3, 1]new_row = [1, 4, 6, 4, 1]triangle = [[1], [1, 1], [1, 2, 1], [1, 3, 3, 1], [1, 4, 6, 4, 1]]
Выход:[[1], [1, 1], [1, 2, 1], [1, 3, 3, 1], [1, 4, 6, 4, 1]]