python - 需要帮助了解将 N*N 矩阵原地旋转 90 度的解决方案是如何工作的

标签 python arrays algorithm

<分区>

我想了解将 N*N 数组原地旋转 90 度的解决方案。 这是对之前提出但现在已关闭的问题的引用 - [链接] How to rotate a matrix 90 degrees without using any extra space? 最佳投票答案看起来很简洁,但我无法理解,有人可以解释这些步骤吗

最佳答案

它正在使用 XOR swap trick这在 python 中不需要,因为您可以在一个表达式中一次交换所有四个元素:

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

关于python - 需要帮助了解将 N*N 矩阵原地旋转 90 度的解决方案是如何工作的,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15644761/

相关文章:

算法帮助 : Calculate binary possibilities whilst ignoring zero bits

python - 零足迹 Python-Social-Auth 身份验证

Python Mechanize - 如何在下拉菜单中提交未列出的值

java - 你能创建一个类实例数组吗?

arrays - 循环缓冲区中的最大连续总和

c - 我缺少哪个测试用例?

algorithm - 如何快速计算这个系列的模 m 的总和?

python - 有没有办法用分箱数据反转 Altair 等值区域图的配色方案?

python - 如何在 Django 中对特定用户和特定项目使用 deleteview?

javascript - 从返回的数组中获取变量