Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> Python

หมุนเมทริกซ์ 90 องศาตามเข็มนาฬิกา ใน Python


ปัญหา

ให้เมทริกซ์ 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))