方法一:分别定义出四个节点,依次交换
public void rotate(int[][] matrix) {
if(matrix.length == 0 || matrix[0].length == 0)return;
int len = matrix.length - 1;
int tmp = matrix.length - 1;
for (int i = 0; i < tmp; i++) {
for (int j = i; j < tmp; j++) {
int x1 = i,y1 = j;
int x2 = j,y2 = len - i;
int x3 = len - i,y3 = len - j;
int x4 = len - j,y4 = i;
swap(matrix,x1,y1,x2,y2);
swap(matrix,x1,y1,x3,y3);
swap(matrix,x1,y1,x4,y4);
}
tmp--;
}
}
private void swap(int[][] matrix, int i, int j, int i1, int j1) {
int tmp = matrix[i][j];
matrix[i][j] = matrix[i1][j1];
matrix[i1][j1] = tmp;
}
方法二:先上下的行交换,再根据主对角线元素交换
private void rotate(int[][] matrix) {
if(matrix.length == 0 || matrix[0].length == 0)return;
int len = matrix.length;
//上下翻转
int [] tmp;
for (int i = 0; i < len / 2; i++) {
tmp = matrix[i];
matrix[i] = matrix[len - i - 1];
matrix[len - i - 1] = tmp;
}
//按对角线翻转
for (int i = 0; i < len; i++) {
for (int j = i + 1; j < len; j++) {
int t = matrix[i][j];
matrix[i][j] = matrix[j][i];
matrix[j][i] = t;
}
}
}