
求解代码
java
public int[][] rotateMatrix(int[][] mat, int n) {
// 空矩阵、空方阵直接返回
if (mat == null || n == 0) {
return mat;
}
// 矩阵转置(行和列互换)
for (int i = 0; i < n; i++) {
for (int j = i; j < n; j++) {
int tmp = mat[i][j];
mat[i][j] = mat[j][i];
mat[j][i] = tmp;
}
}
// 反转转置后矩阵的每一行,完成顺时针90度旋转
for (int[] row : mat) {
reverse(row);
}
return mat;
}
// 双指针法原地反转一维数组
private void reverse(int[] arr) {
int left = 0;
int right = arr.length - 1;
while (left < right) {
// 交换左右指针元素
int tmp = arr[left];
arr[left] = arr[right];
arr[right] = tmp;
left++;
right--;
}
}
小贴士
j 从 0 开始会让对角线上下的元素对 被交换两次,交换两次就等于没交换,而j从i开始能保证每个元素对只被交换一次。