Сначала транспонируйте квадратную матрицу, затем разверните каждую строку. Эта комбинация даёт поворот на 90° по часовой стрелке без дополнительной матрицы.
Поворот квадратной матрицы на 90° по часовой стрелке
Сначала транспонируйте квадратную матрицу, затем разверните каждую строку. Эта комбинация даёт поворот на 90° по часовой стрелке без дополнительной матрицы.
Короткий ответ
Что ответить на собеседовании
Подробный разбор
Ответ с пояснениями
Условие
Дана двумерная квадратная матрица. Требуется выполнить её вращение на 90 градусов в направлении часовой стрелки, при этом используя только постоянный объём дополнительной памяти.
Ответ
Сначала транспонируйте квадратную матрицу, затем разверните каждую строку. Эта комбинация даёт поворот на 90° по часовой стрелке без дополнительной матрицы.
def rotate(matrix):
n = len(matrix)
if any(len(row) != n for row in matrix):
raise ValueError('Матрица должна быть квадратной')
for i in range(n):
for j in range(i + 1, n):
matrix[i][j], matrix[j][i] = matrix[j][i], matrix[i][j]
for row in matrix:
row.reverse()
Каждый исходный элемент (i, j) переходит в (j, n − 1 − i). Время O(n²), дополнительная память O(1). Строки должны быть независимыми изменяемыми списками, а не несколькими ссылками на один и тот же список.