Problem description: Given an N X N integer matrix, rotate it bye 90 degrees in place.In-place means minimal extra memory to be used, i.e. don’t make a new array to copy into). Rotate clockwise means top-row becomes right-column, right column becomes bottom-row etc.
eg.
[1, 2, 3, 4] [9, 6, 9, 1] [9, 8, 5, 6] –> [2, 5, 8, 2] [6, 5, 3, 7] [6, 3, 5, 3] [9, 2, 6, 8] [8, 7, 6, 4]
Solution:
The idea is to do a “four-way” swap variable, we need to move the values from top -> right, right -> bottom, bottom -> left and left -> top, can we do it by using only one extra variable? Yes, we can.
At each layer we are gonna loop through the elements and swap them as follows:
1.- Save the ith element in the top array in a temporary variable (in our example the top array is [1 2 3 4] ).
2.- Move the ith element from left to top.
3.- Move the ith element from bottom to left.
4.- Move the ith element from right to bottom.
5.- Save the value of our temporary variable in the ith position in the right array.
void rotateMatrix(int a[][]) { int n = a.length; if (n <= 1) { return; // nothing to do } /* layers */ for (int i = 0; i < n / 2; i++) { /* elements */ for (int j = i; j < n - i - 1; j++) { int saved = a[i][j]; a[i][j] = a[n - j - 1][i]; a[n - j - 1][i] = a[n - 1 - i][n - 1 - j]; a[n - 1 - i][n - 1 - j] = a[j][n - 1 - i]; a[j][n - 1 - i] = saved; } } }