PU Rotate Image

Jan 01, 1970

You are given an n x n 2D matrix representing an image.

Rotate the image by 90 degrees (clockwise).

Follow up:

  • Could you do this in-place?

C Solution:

void rotate(int** matrix, int matrixRowSize, int matrixColSize) {
    int i, n = matrixRowSize;
    for (i = 0; i < n / 2; i++) {
        int j;
        for (j = i; j < n - 1 - i; j++) {
            int tmp = matrix[j][n - 1 - i];
            matrix[j][n - 1 - i] = matrix[i][j];
            matrix[i][j] = matrix[n - 1 - j][i];
            matrix[n - 1 - j][i] = matrix[n - 1 - i][n - 1 - j];
            matrix[n - 1 - i][n - 1 - j] = tmp;
        }
    }
}

Python Solution 1:

class Solution(object):
    def rotate(self, matrix):
        """
        :type matrix: List[List[int]]
        :rtype: void Do not return anything, modify matrix in-place instead.
        """
        N = len(matrix)
        for i in range(N // 2):
            for j in range(i, N - 1 - i):
                matrix[i][j], matrix[j][N - 1 - i], matrix[N - 1 - i][N - 1 - j], matrix[N - 1 - j][i] = (
                    matrix[N - 1 - j][i], matrix[i][j], matrix[j][N - 1 - i], matrix[N - 1 - i][N - 1 - j]
                )       

Python Solution 2:

class Solution(object):
    def rotate(self, matrix):
        """
        :type matrix: List[List[int]]
        :rtype: void Do not return anything, modify matrix in-place instead.
        """
        N = len(matrix)
        for i in range(N // 2):
            for j in range(i, N - 1 - i):
                matrix[i][j], matrix[j][~i], matrix[~i][~j], matrix[~j][i] = (
                    matrix[~j][i], matrix[i][j], matrix[j][~i], matrix[~i][~j]
                    )       

Summary:

  • The key point here is to find the right index.
  • There is another way, maybe better, maybe worse.

LeetCode: 48. Rotate Image