import java.util.*;
/**
* 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?
*
* Tags: Array
*/
class RotateImg {
public static void main(String[] args) {
int[][] matrix = {{1, 2}, {4, 3}};
new RotateImg().rotate(matrix);
for (int i = 0; i < matrix.length; i++) {
for (int j = 0; j < matrix[i].length; j++) {
System.out.print(matrix[i][j] + " ");
}
System.out.println();
}
}
/**
* Get the length of matrix
* Do level by level, each level edge by edge
* In-place solutions overwrites original matrix
*/
public void rotate(int[][] matrix) {
if (matrix == null || matrix.length == 0 || matrix[0].length == 0) return;
int n = matrix.length;
for (int i = 0; i < n / 2 ; i++) {
for (int j = i; j < n - i - 1 ; j++) {
int tmp = matrix[i][j]; // save in tmp var
matrix[i][j] = matrix[n-j-1][i]; // first col
matrix[n-j-1][i] = matrix[n-i-1][n-j-1]; // last row
matrix[n-i-1][n-j-1] = matrix[j][n-i-1]; // last col
matrix[j][n-i-1] = tmp;
}
}
}
}