【题目】
给定一个N×N的矩阵matrix,把这个矩阵调整成顺时针转动90°后的形式。
例如:
1 2 3 4
5 6 7 8
9 10 11 12
13 14 15 16
顺时针转动90°后为
13 9 5 1
14 10 6 2
15 11 7 3
16 12 8 4
【要求】
额外空间复杂度为O(1)
【代码】
public static void main(String[] args) {
int[][] m={{1,2,3,4},{5,6,7,8},{9,10,11,12},{13,14,15,16}};
rotate(m);
}
//将正方形矩阵顺时针转动90°
public static void rotate(int[][] matrix){
int tR=0;
int tC=0;
int dR=matrix.length-1;
int dC=matrix[0].length-1;
while(tR<dR){
rotateEdge(matrix,tR++,tC++,dR--,dC--);
}
for(int i=0;i<matrix.length;i++){
for(int j=0;j<matrix[0].length;j++){
System.out.print(matrix[i][j]+" ");
}
}
}
//分圈处理
private static void rotateEdge(int[][] matrix, int tR, int tC, int dR, int dC) {
int times=dR-tR;//总的组数,如1,4,16,13为一组
int temp=0;
for(int i=0;i!=times;i++){
temp=matrix[tR][tC+i];//1
matrix[tR][tC+i]=matrix[dR-i][tC];//13换到1位置
matrix[dR-i][tC]=matrix[dR][dC-i];//16换到13位置
matrix[dR][dC-i]=matrix[tR+i][dC];//4换到16位置
matrix[tR+i][dC]=temp;//1换到4位置
}
}