Solution 1:
对于90度的翻转有很多方法,一步或多步都可以解,我们先来看一种直接的方法,对于当前位置,计算旋转后的新位置,然后再计算下一个新位置,第四个位置又变成当前位置了,所以这个方法每次循环换四个数字,如下所示:
1 2 3 7 2 1 7 4 1
4 5 6 --> 4 5 6 --> 8 5 2
7 8 9 9 8 3 9 6 3
Solution 2:
还有一种解法,首先以从对角线为轴翻转,然后再以x轴中线上下翻转即可得到结果,如下图所示(其中蓝色数字表示翻转轴):
1 2 3 9 6 3 7 4 1
4 5 6 --> 8 5 2 --> 8 5 2
7 8 9 7 4 1 9 6 3
Solution 3:
最后再来看一种方法,这种方法首先对原数组取其转置矩阵,然后把每行的数字翻转可得到结果,如下所示(其中蓝色数字表示翻转轴):
1 2 3 1 4 7 7 4 1
4 5 6 --> 2 5 8 --> 8 5 2
7 8 9 3 6 9 9 6 3
27%
public void rotate(int[][] matrix) {
int n = matrix.length;
for(int i = 0; i < n / 2; i++){
for(int j = i; j < n - 1 - i; j++){
int tmp = matrix[i][j];
matrix[i][j] = matrix[n - 1 - j][i];
matrix[n - 1 - j][i] = matrix[n - 1 - i][n - 1 - j];
matrix[n - 1 - i][n - 1 - j] = matrix[j][n - 1 - i];
matrix[j][n - 1 - i] = tmp;
}
}
}
75%public void rotate(int[][] matrix) {
int row,col;
int length = matrix.length;
int edge = length-1;
int nEdge;
for(row = 0;row<edge;row++){
nEdge = edge;
for(col = row;col<edge;col++,nEdge--){
int val=matrix[row][col];
matrix[row][col] = matrix[nEdge][row];
matrix[nEdge][row] = matrix[edge][nEdge];
matrix[edge][nEdge] = matrix[col][edge];
matrix[col][edge] = val;
}
edge--;
}
}