48. 旋转图像
思路一:通过旋转模拟,由外向内,每一次都交换四个元素的位置,直到一层元素都顺时针旋转完毕。
class Solution {
public void rotate(int[][] matrix) {
int n = matrix.length;
// 旋转圈数
int loop = n / 2;
// 起始边界位置
int start = 0;
// 结束边界位置
int end = n - 1;
while (loop -- > 0) {
for (int index = 0; start + index < end; index ++) {
int temp = matrix[start][start + index];
matrix[start][start + index] = matrix[end - index][start];
matrix[end - index][start] = matrix[end][end - index];
matrix[end][end - index] = matrix[start + index][end];
matrix[start + index][end] = temp;
}
start ++;
end --;
}
}
}
**思路二:**向将数组上下翻转,后沿着主对角线翻转,最终可以达到将数组顺时针旋转90度的效果。
class Solution {
public void rotate(int[][] matrix) {
int n = matrix.length;
// 上下翻转
for (int i = 0; i < n / 2; i ++) {
for (int j = 0; j < n; j ++) {
int temp = matrix[n - 1 - i][j];
matrix[n - 1 - i][j] = matrix[i][j];
matrix[i][j] = temp;
}
}
// 沿着主对角线翻转
for (int i = 0; i < n; i ++) {
for (int j = 0; j < i; j ++) {
int temp = matrix[i][j];
matrix[i][j] = matrix[j][i];
matrix[j][i] = temp;
}
}
}
}