题目
给定一个 n × n 的二维矩阵表示一个图像。
将图像顺时针旋转 90 度。
说明:
你必须在原地旋转图像,这意味着你需要直接修改输入的二维矩阵。请不要使用另一个矩阵来旋转图像。
You are given an n x n 2D matrix representing an image.
Rotate the image by 90 degrees (clockwise).
Note:
You have to rotate the image in-place, which means you have to modify the input 2D matrix directly. DO NOT allocate another 2D matrix and do the rotation.
示例 1:
1 | 给定 matrix = |
示例 2:
1 | 给定 matrix = |
解题方法
拆分为翻折
将矩阵顺时针旋转90°,分解为绕轴翻转的步骤。也就是先绕对角线翻转,然后绕两腰中位线翻转。要求直接操作原矩阵,所以不能直接使用新矩阵来保存结果,使用一个变量来保存被替换的单元。这段代码跑了2ms,超过93.40%的java提交。
1 | public class Solution { |
旋转对应坐标变换
顺时针旋转90°,对应360°/90°=4个单元进行逐一替换,对应单元的坐标替换关系为:
[i, j] -> [j, matrix.length - 1 - i];
[j, matrix.length - 1 - i] -> [matrix.length - 1- i, matrix.length - 1 - j];
[matrix.length - 1- i, matrix.length - 1 - j] -> [matrix.length - 1- j, i];
[matrix.length - 1- j, i] -> [i, j]。
按这种坐标转换,遍历矩阵的四分之一即可。这段代码也跑了2ms,超过了93.40%的java提交。
1 | class Solution { |
结语
Keep coding!