日野弥生:勉強しよう
LeetCode 48 - 旋转图像
发表于2024年12月15日
先通过观察得出矩阵翻转的表达式变化: $M_{i,j} \Rightarrow M_{j,(n-i-j)};$
为了满足题目要求(无需新增空间,直接原地修改矩阵),所以需要对矩阵进行转置后平行翻转,即: $ M_{i,j} \Rightarrow M_{j,i} ; M_{j,i} \Rightarrow M_{j,(n-i-j)}; $
注意
- 转置时,第二重循环j的起点是i,可以避免遍历完全部的位置,只需处理一半即可;
- 平行翻转时,利用std::reverse直接翻转即可。
class Solution {
public:
void rotate(vector<vector<int>>& matrix) {
for(int i = 0;i<matrix.size();i++)
{
for(int j = i;j< matrix[i].size();j++)
{
std::swap(matrix[i][j],matrix[j][i]);
}
}
for(auto& iter: matrix)
std::reverse(iter.begin(), iter.end());
}
};