Java Rotate 2d Array 90 degrees
    public static void rotate90(int[][] arr){
if(arr != null){
int len = arr.length;
for(int k=0; k < len/2; k++){
for(int i=k; i < len-1-k; i++){
int tmp = arr[k][i];
arr[k][i] = arr[len-1-i][k];
arr[len-1-i][k] = arr[len-1-k][len-1-i];
arr[len-1-k][len-1-i] = arr[i][len-1-k];
arr[i][len-1-k] = tmp;
}
}
}
}
--------------------
[1][2][3]
[4][5][6]
[7][8][9]
--------------------
[7][4][1]
[8][5][2]
[9][6][3]
--------------------

Rotate 2d array 90 degrees with geometry technic
How to find a vector that is perpendicular to $v$ 1. find the reflection of $v$ about the line $y = x$ 2. flip the reflection point about $x$-Axis 1. Given a vector $v$ 2. $w$ is the reflection about $y=x$ 3. $w_{1}$ is the flip of reflection point about $x$-Axis 4. we have: $w_{1} \perp v$ 5. we can apply above processes to roate 2d array in 90 degrees clockwise Note: if we want to rotate 2d array 90 degrees counter-clockwise we need to flip the reflection point about $y$-Axis

    /**
* Rotate 2d array 90 degrees in counter-clockwise
*
* 1. swap x, y. e.g. (x, y) -> (y, x)
* 2. swap elements: [k][i], [k][len-1-i].
*    e.g tmp = arr[k][i],
*    arr[k][i] = arr[k][len - 1 - i], arr[k][len-1-i] = tmp
*/
public static void rotateArr90(int[][] arr){
if(arr != null){
// assume the lengths of row and column are the same
int len = arr.length;

// (x, y) -> (y, x)
for(int i=0; i < len; i++){
for(int j=i; j < len; j++){
int tmp = arr[i][j];
arr[i][j] = arr[j][i];
arr[j][i] = tmp;
}
}

// flip all rows
for(int i=0; i < len; i++){
for(int j=0; j < len/2; j++){
int tmp = arr[i][j];
arr[i][j] = arr[i][len - 1 - j];
arr[i][len - 1 - j] = tmp;
}
}
}
}