48. Rotate Image

Description

You are given an n x n 2D matrix representing an image, rotate the image by 90 degrees (clockwise).

You have to rotate the image in-place, which means you have to modify the input 2D matrix directly. DO NOT allocate another 2D matrix and do the rotation.

Constraints

  • matrix.length == n

  • matrix[i].length == n

  • 1 <= n <= 20

  • -1000 <= matrix[i][j] <= 1000

Approach

Examples

Input: matrix = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]

Output: [[7, 4, 1], [8, 5, 2], [9, 6, 3]]

Solutions

/**
 * Time complexity : O(N*N)
 * Space complexity : O(1)
 */

class Solution {
    public void rotate(int[][] matrix) {
        if(matrix == null || matrix.length == 0) return;
        
        int row = matrix.length,
            col = matrix.length;
        
        // trnspose of a matrix
        for(int r = 0; r < row; r++) {
            for(int c = r+1; c < col; c++) {
                int tmp = matrix[r][c];
                matrix[r][c] = matrix[c][r];
                matrix[c][r] = tmp;
            }
        }
        
        // swap columns
        for(int c = 0; c < col/2; c++) {
            for(int r = 0; r < row; r++) {
                int tmp = matrix[r][c];
                matrix[r][c] = matrix[r][col-c-1];
                matrix[r][col-c-1] = tmp;
            }
        }
                
    }
}

Follow up

Last updated

Was this helpful?