2D matrix rotation

Added: 2025-09-13 05:57:10

Question Image

2D matrix  rotation

Answer

✏️ Edit
def rotate_matrix(matrix, m, n, r):
    layers = min(m, n) // 2
    
    for layer in range(layers):
        elements = []
        
        top = layer
        bottom = m - 1 - layer
        left = layer
        right = n - 1 - layer
        
        for j in range(left, right + 1):
            elements.append(matrix[top][j])
        
        for i in range(top + 1, bottom + 1):
            elements.append(matrix[i][right])
        
        if bottom > top:
            for j in range(right - 1, left - 1, -1):
                elements.append(matrix[bottom][j])
        
        if right > left:
            for i in range(bottom - 1, top, -1):
                elements.append(matrix[i][left])
        
        layer_size = len(elements)
        if layer_size == 0:
            continue
            
        rotations = r % layer_size
        elements = elements[rotations:] + elements[:rotations]
        
        idx = 0
        
        for j in range(left, right + 1):
            matrix[top][j] = elements[idx]
            idx += 1
        
        for i in range(top + 1, bottom + 1):
            matrix[i][right] = elements[idx]
            idx += 1
        
        if bottom > top:
            for j in range(right - 1, left - 1, -1):
                matrix[bottom][j] = elements[idx]
                idx += 1
        
        if right > left:
            for i in range(bottom - 1, top, -1):
                matrix[i][left] = elements[idx]
                idx += 1
    
    return matrix

m, n, r = map(int, input().split())
matrix = []
for _ in range(m):
    row = list(map(int, input().split()))
    matrix.append(row)

rotated_matrix = rotate_matrix(matrix, m, n, r)

for row in rotated_matrix:
    print(' '.join(map(str, row)))