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?
2 Steps
1st: rotate by middle line
2nd: rotate by diagonal line
done
For instance:
1 2 3 7 8 9 7 4 1
4 5 6 => 4 5 6 => 8 5 2
7 8 9 1 2 3 9 6 3
public class Solution {
public void rotate(int[][] matrix) {
int rows = matrix.length;
int cols = matrix[0].length;
//rotate by middle line i<row/2(skip rotate middle line) + j<cols
for (int i = 0; i < rows / 2; i++) {
for (int j = 0; j < cols; j++) {
swap(matrix, i, j, rows - i - 1, j);
}
}
//rotate by diagonal line i<row + j<cols
for (int i = 0; i < rows; i++) {
for (int j = i; j < cols; j++) {
swap(matrix, i, j, j, i);
}
}
}
private void swap(int[][] matrix, int x1, int y1, int x2, int y2) {
int temp = matrix[x1][y1];
matrix[x1][y1] = matrix[x2][y2];
matrix[x2][y2] = temp;
}
}