题目:
给定一个NxN的矩阵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
思路:
此题可以采用分解矩阵的思路解决。首先是矩阵的外围即:
1 2 3 4
5 8
9 12
13 14 15 16
依次交换四个元素即1 、 13 、16 、4。再交换5 、14 、12 、3.。。。直到循环结束。
代码:
/**
* 翻转矩阵90度
*/
public void rollingOver(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--);
}
}
/**
* 旋转操作
*/
public void rotate(int [][] matrix,int tR,int tC,int dR,int dC){
int times = dC - tC;
for(int i=0;i<times;i++){
int 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;
}
}