我們知道第一個點的座標 是基於(0,0)給的, i 是到第一行的距離, j是到第一列的距離。
圓圈 代表點,各個點基於一個正方形給的座標,要將其全部轉換爲 第一個正方形的座標(即爲真正座標)。
經過旋轉後,如下圖。
第一個圓圈的座標爲正常的 :(i,j)。
轉換後二 : (j,N-i-1)
轉換後三 : (N-i-1, N-j-1)
轉換後四 : (N-j-1,i)
故選擇四分之個區域,將其四個座標進行 循環更換即可。
class Solution {
public void rotate(int[][] matrix) {
int N = matrix.length;
// 選擇 四分之一區域
for(int i = 0; i < N / 2; i++){
for(int j = 0; j < (N + 1) / 2; j++){ // 四個座標 輪流轉換。
int temp = matrix[i][j];
matrix[i][j] = matrix[N - j - 1][i];
matrix[N - j - 1][i] = matrix[N - i - 1][N - j - 1];
matrix[N - i - 1][N- j - 1] = matrix[j][N - i - 1];
matrix[j][N - i - 1] = temp;
}
}
}
}
畫圖太爛,大家見諒。