矩阵原地旋转
问题
给定一个 n x n
的二维矩阵(代表一张图片)。
顺时针旋转矩阵 90
度。
注意
你必须原地旋转图像,这意味着你需要直接修改输入的二维矩阵。不要 分配另一个二维矩阵来进行旋转。
示例
示例 #1
给定的输入矩阵:
[
[1, 2, 3],
[4, 5, 6],
[7, 8, 9],
]
顺时针旋转输入矩阵,使其成为:
[
[7, 4, 1],
[8, 5, 2],
[9, 6, 3],
]
示例 #2
给定的输入矩阵:
[
[5, 1, 9, 11],
[2, 4, 8, 10],
[13, 3, 6, 7],
[15, 14, 12, 16],
]
顺时针旋转输入矩阵,使其成为:
[
[15, 13, 2, 5],
[14, 3, 4, 1],
[12, 6, 8, 9],
[16, 7, 10, 11],
]
算法
我们需要对矩阵进行两次反射:
- 垂直反射
- 从左下到右上的对角线反射
或者我们还可以进一步,从左上到右下的对角线反射,然后水平反射。
一个常见的问题是,你如何确定要进行哪种反射?简单地撕去一张正方形的纸,写下一个随机单词,这样你就知道它的旋转方向了。然后,翻转这张正方形纸片,直到你想出解决方案。
这里是第一个例子,第一行可能使用从右上到左下的对角线反射以及水平反射来旋转。
假设我们矩阵顶部有一行字符串:
A B C
• • •
• • •
让我们做右上/左下对角线反射:
A B C
/ / •
/ • •
现在让我们做水平反射:
A → →
B → →
C → →
字符串已经旋转了90度:
• • A
• • B
• • C