题目描述
给定一个 n × n 的二维矩阵表示一个图像。
将图像顺时针旋转 90 度。
要求:原地旋转
示例:
给定 matrix =
[
[1,2,3],
[4,5,6],
[7,8,9]
],
原地旋转输入矩阵,使其变为:
[
[7,4,1],
[8,5,2],
[9,6,3]
]
参考思路
- 最直接的想法是先转置矩阵,然后翻转每一行。
- 自外向内一共有不超过 n/2n/2n/2层(单个中心元素不算一层)矩形框。对于第 timestimestimes层矩形框,其框边长 len=nums−(times∗2)len=nums-(times*2)len=nums−(times∗2),将其顺时针分为 444份 len−1len-1len−1 的边,对四条边进行元素的循环交换即可。(稍复杂一点,需要仔细分析下标)

- 一行python代码即可搞定:
matrix[:] = map(list, zip(*matrix[::-1]))。
参考代码
class Solution {
public:
void rotate(vector<vector<int>>& matrix) {
int n = matrix.size();
for(int i = 0; i < n; i++){
for(int j = i+1; j < n; j++)
swap(matrix[i][j], matrix[j][i]);
}
for(int i = 0; i < n; i++){
for(int j = 0; j < (n >> 1); j++)
swap(matrix[i][j], matrix[i][n-1-j]);
}
}
};
图像矩阵原地旋转算法
本文介绍了一种原地旋转图像矩阵的算法,通过转置矩阵和翻转行实现90度顺时针旋转。文章提供了详细的思路解析,包括如何处理不同层数的矩形框,并给出了一行Python代码实现及C++示例代码。
406

被折叠的 条评论
为什么被折叠?



