ปัญหา
ให้เมทริกซ์ n x n หมุน 90 องศาตามเข็มนาฬิกา (in-place หรือสร้างใหม่)
ตัวอย่าง
Input: [[1, 5, 7], [9, 6, 3], [2, 1, 3]] Output: [[2, 9, 1], [1, 6, 5], [3, 3, 7]]
วิธีที่ 1: สร้างเมทริกซ์ใหม่ (เข้าใจง่าย)
def rotate(matrix):
n = len(matrix)
rotated = [[0]*n for _ in range(n)]
for i in range(n):
for j in range(n):
rotated[j][n-1-i] = matrix[i][j]
return rotated
วิธีที่ 2: In-place (Transpose + Reverse Rows)
1. Transpose (สลับแถว-คอลัมน์)
2. Reverse แต่ละแถว
def rotate_inplace(matrix):
n = len(matrix)
# Transpose
for i in range(n):
for j in range(i+1, n):
matrix[i][j], matrix[j][i] = matrix[j][i], matrix[i][j]
# Reverse each row
for row in matrix:
row.reverse()
return matrix
วิธีที่ 3: ใช้ Zip (Pythonic)
def rotate_zip(matrix):
return [list(row) for row in zip(*matrix[::-1])]
การทดสอบ
mat = [[1,5,7],[9,6,3],[2,1,3]] print(rotate(mat)) print(rotate_inplace([row[:] for row in mat])) print(rotate_zip(mat))