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.

&nbsp;
Example 1:

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


Example 2:

Input: matrix = [[5,1,9,11],[2,4,8,10],[13,3,6,7],[15,14,12,16]]
Output: [[15,13,2,5],[14,3,4,1],[12,6,8,9],[16,7,10,11]]


&nbsp;
Constraints:


	n == matrix.length == matrix[i].length
	1 &lt;= n &lt;= 20
	-1000 &lt;= matrix[i][j] &lt;= 1000


class Solution:
    
    def rotate(self, matrix: List[List[int]]) -> None:
        """
        Do not return anything, modify matrix in-place instead.
        """
        # transpose 
        size = len(matrix)
        for i in range(size):
            for j in range(i+1, size):
                matrix[j][i],matrix[i][j] = matrix[i][j],matrix[j][i]
        
        print(matrix)
        
        # reverse row
        for row in range(len(matrix)):
            matrix[row] = matrix[row][::-1]
        
        print(matrix)
class Solution {
    public void swap(int[][] matrix, int n1, int m1, int n2, int m2) {
        int a = matrix[n1][m1];
        int temp = matrix[n2][m2];
        matrix[n2][m2] = a;
        matrix[n1][m1] = temp;
    }
    public void rotate(int[][] matrix) {
        int n = matrix.length;
        for (int i = 0; i < n/2; i++) {
            for (int j = 0; j < n; j++) {
                swap(matrix, i,j, n-i-1, j);
            }
        }
        for (int i = n-1; i >= 0; i--) {
            for (int j = 0; j < i; j++) {
                swap(matrix, i,j, j, i);
            }
        }
    }
}
class Solution {
public:
    void rotate(vector<vector<int>>& matrix) {
        int row = matrix.size();
        for(int i=0;i<row; i++){
            for(int j=0; j<=i;j++){
                swap(matrix[i][j], matrix[j][i]);
            }
        }
        for(int i=0;i<row;i++){
            reverse(matrix[i].begin(), matrix[i].end());
        }
    }
};
/**
 * @param {number[][]} matrix
 * @return {void} Do not return anything, modify matrix in-place instead.
 */
var rotate = function(matrix) {
    let m = matrix.length;
    let n = matrix[0].length;
    
    for (let i = m - 1; i >= 0; i--) {
        for (let j = 0; j < m; j++) {
            matrix[j].push(matrix[i].shift());
        }
    }
};
Rotate Image