我试图了解将 N*N 阵列旋转 90 度的解决方案。这是对先前提出但现在已关闭的问题的参考 - [链接]如何在不使用任何额外空间的情况下将矩阵旋转 90 度? 最佳投票的答案看起来很整洁,但我无法理解它,有人可以解释这些步骤吗
问问题
322 次
1 回答
1
它使用了Python 中不需要的XOR 交换技巧,因为您可以在一个表达式中一次交换所有四个元素:
def rot2(a):
n = len(a)
for x in range((n + 1) / 2):
for y in range(n / 2):
a[x][y], a[n-1-y][x], a[y][n-1-x], a[n-1-x][n-1-y] = (
a[y][n-1-x],
a[x][y],
a[n-1-x][n-1-y],
a[n-1-y][x],
)
N×N 矩阵,N = 3:
1 2 3
4 5 6
7 8 9
N / 2 = 1
, (N + 1)/2 = 2
.
x = [0, 2)
(0 或 1), y = [0, 1)
(0)。
角落:
1 2 | 3
_____|
4 5 6
7 8 9
互换:1 ← 3 ← 7 ← 9 (← 1)
;2 ← 6 ← 8 ← 4 (← 2)
5×5矩阵:
a b c d e
f g h i j
k l m n o
p q r s t
u v w x y
N / 2 = 2
, (N + 1)/2 = 3
.
x = [0, 3)
(0 或 1 或 2),y = [0, 2)
(0 或 1)。
角落:
a b c | d e
f g h | i j
______|
k l m n o
p q r s t
u v w x y
掉期:
a ← e ← y ← u
f ← d ← t ← v
b ← j ← x ← p
g ← i ← s ← q
c ← o ← w ← k
h ← n ← r ← l
于 2013-03-26T18:51:03.757 回答