Given an NxN array, write a function that would do an in-place rotate by 90 degrees.
int[,] array = new int[4,4] {
{ 1,2,3,4 },
{ 5,6,7,8 },
{ 9,0,1,2 },
{ 3,4,5,6 }
};
int[,] rotated = RotateMatrix(array, 4);
static int[,] RotateMatrix(int[,] matrix, int n) {
int[,] ret = new int[n, n];
for (int i = 0; i < n; ++i) {
for (int j = 0; j < n; ++j) {
ret[i, j] = matrix[n - j - 1, i];
}
}
return ret;
}
In-place solution:
void RotateBy90(int (*arr)[N])
{
for (int j = 0; j < N/2; j++)
{
for (int i = j; i < N - j - 1; i++)
RotateElement(arr, i, j);
}
}
void RotateElement(int (*arr)[N], int i, int j)
{
int temp = arr[i][j];
arr[i][j] = arr[N - j - 1][i];
arr[N - j - 1][i] = arr[N - i - 1][N - j - 1];
arr[N - i - 1][N - j - 1] = arr[j][N - i - 1];
arr[j][N - i - 1] = temp;
}