旋转图像
给定一个 n × n 的二维矩阵 matrix 表示一个图像,将图像顺时针旋转 90 度。必须在原地旋转图像,这意味着需要直接修改输入的二维矩阵,而不能使用另一个矩阵来旋转图像。
方法一
分析
通过找规律的方式能够得到旋转前后元素之间的映射关系,但是严格来说这是一道几何题,主要考察了空间变换的知识。
图像旋转的效果如图1所示
其旋转过程其实包括了两部分,第一步绕原点顺时针旋转90°
,第二步沿原y轴右移n - 1
这两步的变换矩阵可以写出来
$$
\begin{bmatrix}
0 & 1 & 0 \\
-1 & 0 & n-1 \\
0 & 0 & 1 \\
\end{bmatrix}
$$
进一步可以得到坐标变换公式,代表原始位置的坐标变换后的新坐标
$$
\begin{bmatrix}
0 & 1 & 0 \\
-1 & 0 & n-1 \\
0 & 0 & 1 \\
\end{bmatrix}
\begin{bmatrix}
ori_x \\
ori_y \\
1 \\
\end{bmatrix}
=
\begin{bmatrix}
new_x \\
new_y \\
1 \\
\end{bmatrix}
$$
即
1 | new_x = ori_y |
反向可以推出任意位置的新坐标是由哪一原始坐标得到的(方便写代码)
1 | ori_x = n - new_y - 1 |
于是我们通过坐标变换的方式得到了公式
代码
时间复杂度:O(n^2)
空间复杂度:O(1)
1 | class Solution { |
方法二
代码
时间复杂度:O(n^2)
空间复杂度:O(1)
1 | class Solution { |