跳到主要内容

48 旋转图像

https://leetcode.cn/leetbook/read/top-interview-questions-easy/xnhhkv/

https://leetcode.cn/problems/rotate-image/description/

cost: 7m46s

先水平翻转,再沿着 x=y 的对角线翻转。将矩阵想象成一个圆片,类似表盘一样上面有从1开始的数字,向右旋转并不需要剪开圆片,只需要旋转就可以。只是代码上不好实现,需要用数学推一下公式。想象将圆片水平翻一下,然后斜45度(以这个线\为轴)翻转,就能达到目的。而且这2个操作都很容易用代码实现。

class Solution {
public:
void rotate(vector<vector<int>>& matrix) {
for (int i = 0, j = matrix.size() - 1; i < j; i++, j--) {
std::swap(matrix[i], matrix[j]);
}
for (int i = 0; i < matrix.size(); i++) {
for (int j = i + 1; j < matrix.size(); j++) {
std::swap(matrix[i][j], matrix[j][i]);
}
}
}
};
  • 时间复杂度:O(n)
  • 空间复杂度:O(1)