Побочная диагональ
Вы решили задачу. Теперь можно сравнить подходы.
Положение клетки относительно побочной диагонали определяется суммой индексов.
Авторский разбор для локальной версии на основе условия задачи. Это не выгрузка чужих посылок и не официальное решение исходного сайта.
Ваше принятое решение
Рекомендуемое решение: Формула для каждой клетки
На диагонали i + j = n − 1; меньшая сумма означает область выше, большая — ниже.
n = int(input())
a = [[0 if i + j < n - 1 else 1 if i + j == n - 1 else 2
for j in range(n)] for i in range(n)]
for row in a:
print(*row)
Время: O(n²). Память: O(n²) для массива.
Другой способ: Сборка строк из блоков
В строке i сначала n−i−1 нулей, затем одна единица и i двоек. Сравнения для каждой клетки не нужны.
n = int(input())
a = []
for i in range(n):
a.append([0] * (n - i - 1) + [1] + [2] * i)
for row in a:
print(*row)
Время: O(n²). Память: O(n²) для массива.
На что обратить внимание
- Диагональ задаётся n−1, а не n.
- Нельзя создавать изменяемые строки через [[0]*n]*n.
Рекомендация учитывает сложность и читаемость для этой задачи. Единственного самого быстрого решения для всех размеров входа и всех компьютеров может не быть.