@二维数组旋转
题目说明
给你一幅由 N × N 矩阵表示的图像,其中每个像素的大小为 4 字节。请你设计一种算法,将图像旋转 90 度。
不占用额外内存空间能否做到?
示例
给定 matrix =
[
[1, 2, 3, 4],
[ 5, 6, 7, 8],
[9,10,11,12],
[13,14,15,16]
],
原地旋转输入矩阵,使其变为:
[
[13,9,5,1],
[14,10,6,2],
[15,11,7,3],
[16,12,8,4]
]
思路
通过观察我们发现:
原来第i列,第j行,变成了第j列,第n-i行;行号就是原来的列号,单列号是与之前行号互补的;
于是上下翻转目的是将互补变成相同,然后i和j就可以互换了,也就是对角线翻转。
1 2 3 4 13 14 15 16
5 6 7 8 9 10 11 12
------------ =水平翻转=> ------------
9 10 11 12 5 6 7 8
13 14