原地旋转正方形矩阵
旋转的矩形的宏观的规律是什么?
1.对于某一个元素而言,转移的路径如下图所示;我们把一层的所有节点都按照这么旋转,就可以层节点旋转;
2.按照1的步骤操作所有的层;
旋转一层的函数:
//旋转一层 A(ar,ac)为左上点 B(br,bc)为右下节点,AB线段是对角线;
void rotateMatrixLevel(int[][] matrix, int ar, int ac, int br, int bc) {
int tmp = 0;
for (int i = 0; i < bc - ac; i++) {
//顺时针的四个点 需要交换的四个点
//(ar,ac+i),(ar+i,bc),(br,bc-i),(br-i,ac)
// 使用临时变量辅助进行旋转
tmp = matrix[br - i][ac];
matrix[br - i][ac] = matrix[br][bc - i];
matrix[br][bc - i] = matrix[ar + i][bc];
matrix[ar + i][bc] = matrix[ar][ac + i];
matrix[ar][ac + i] = tmp;
}
}
旋转矩阵:
void rotateMatrix(int[][] matrix) {
int ar = 0, ac = 0; // A左上角的点
int br = matrix.length - 1, bc = br; //B右下角的点
// A,B构成一个对角线
while (ar < br) {// 当行号相遇的时候,说明此时只有一个元素
rotateMatrixLevel(matrix, ar, ac, br, bc);
//旋转下一层
ar++;
ac++;
br--;
bc--;
}
}