题目描述:
给一个n*n的二维数组的图像,将其顺时针旋转90°后输出。
注意:必须in-place旋转,即直接在该数组上修改,不得重新分配一个数组。
例如:
1 2 3
4 5 6
7 8 9
旋转90°后:
7 4 1
8 5 2
9 6 3
思路:
1.首先将给定二维数组转置
1 4 7
2 5 8
3 6 9
2.再对每一行求逆序
7 4 1
8 5 2
9 6 3
代码如下:
class Solution{
public void rotate(int[][] matrix){
if(matrix==null) return;
//转置
for(int i=0;i<matrix.length-1;i++){
for(int j=i;j<matrix.length-1;j++){
int temp=0;
temp=matrix[i][j];
matrix[i][j]=matrix[j][i];
matrix[j][i]=temp;
}
}
//把每一行逆序
for(int i=0;i<matrix.length-1;i++){
for(int j=0;j<matrix.length/2;j++){
temp=matrix[i][j];
matrix[i][j]=matrix[i][matrix.length-1-j];
matrix[i][matrix.length-1-j]=temp;
}
}
}
时间复杂度O(N2).