【题目】
给定一个整型正方形矩阵matrix,请把该矩阵调整成 顺时针旋转90度的样子。
【要求】 额外空间复杂度为O(1)。
1 2 3 7 4 1
4 5 6 -------> 8 5 2
7 8 9 9 6 3
思路:
先转外圈,后转内圈
1 3 9 7四个点相互交换位置。 1来到3的位置、3来到9的位置、9来到7的位置、7来到1的位置
2 6 8 4四个点相互交换位置。 2来到6的位置、6来到8的位置、8来到4的位置、4来到2的位置
3 9 7 1四个点相互交换位置。 3来到9的位置、9来到7的位置、7来到1的位置、1来到3的位置
/**
* 矩阵转圈
*/
public class Rotate {
public void rotate(int[][] matrix){
int tR = 0;
int tC = 0;
int dR = matrix.length - 1;
int dC = matrix[0].length - 1;
while(tR < dR){
rotate(matrix,tR++,tC++,dR--,dC--);
}
}
private void rotate(int[][] matrix, int tR, int tC, int dR, int dC) {
int time = dC - tC;
int temp = 0;
for(int i = 0 ; i != time ; i++){
temp = matrix[tR][tC+i];
matrix[tR][tC+i] = matrix[dR - i][tC];
matrix[dR - i][tC] = matrix[dR][dC - i];
matrix[dR][dC - i] = matrix[tR + i][dC];
matrix[tR + i][dC] = temp;
}
}
}