旋转图像

LeetCode每日一题,48. Rotate Image

先看题目描述

rtHhp4.png

大意就是给定一个 n × n 的矩阵,让我们将其顺时针旋转 90°,让我们将旋转后的矩阵返回,要求不能使用额外空间

算法和思路

思路就是从最外层到内层,逐层的来旋转矩阵

设矩阵的长度为 n,自内向外一共有 n / 2 层矩阵框(单个中心元素不算一层),将每层矩阵框按照顺时针分为 4 条边,对 4 条边进行元素的循环交换即可

对于某一层矩阵框的第一条边上元素 matrix[row][col],要进行 4 条边上对应元素的循环交换,则进行如下操作:

1
2
3
4
5
pre = matrix[row][col];
matrix[row][col] = matrix[n - 1 - col][row];
matrix[n - 1 -col][row] = matrix[n - 1 - row][n - 1 - col];
matrix[n - 1 - row][n - 1 - col] = matrix[col][n - 1 - row];
matrix[col][n - 1 - row] = pre;

算法源码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
class Solution {
public void rotate(int[][] matrix) {
int n = matrix[0].length;
int mid = n / 2;
int pre = 0;
for (int row = 0; row < mid; row++) {
for (int col = row; col < n - 1 - row; col++) {
pre = matrix[row][col];
matrix[row][col] = matrix[n - 1 - col][row];
matrix[n - 1 -col][row] = matrix[n - 1 - row][n - 1 - col];
matrix[n - 1 - row][n - 1 - col] = matrix[col][n - 1 - row];
matrix[col][n - 1 - row] = pre;
}
}
}
}