题目描述:
给你一幅由 N × N 矩阵表示的图像,其中每个像素的大小为 4 字节。请你设计一种算法,将图像旋转 90 度。
不占用额外内存空间能否做到?
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/rotate-matrix-lcci
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
示例1:
给定 matrix =
[
[1,2,3],
[4,5,6],
[7,8,9]
],
原地旋转输入矩阵,使其变为:
[
[7,4,1],
[8,5,2],
[9,6,3]
]
示例2:
给定 matrix =
[
[ 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]
]
题目难度:中等
分析:
最简单的办法就是新创建一个同样大小的数组,然后一行一行的旋转90度到新数组即可。此步骤用笔画一下应该就可以理解:对于矩阵中第i
行的第j
个元素,在旋转后,它出现在倒数第i
列的第j
个位置。(官方题解中的原话和图,代码省略)
5 1 9 11 x x x 5
x x x x =旋转后=> x x x 1
x x x x x x x 9
x x x x x x x 11
x x x x x x 2 x
2 4 8 10 =旋转后=> x x 4 x
x x x x x x 8 x
x x x x x x 10 x
此题还可以用翻转来代替旋转,先水平翻转,再根据对角线(左上 --> 右下)
翻转。代码如下:
java:
class Solution {
public void rotate(int[][] matrix) {
// 获取到N的长度
int n = matrix.length;
// 上下翻转