是否存在顺时针旋转M * N 2D矩阵的好方法,假设矩阵空间为max(M,N)* max(M,N)

时间:2014-11-11 04:53:22

标签: algorithm matrix

欣赏任何建议。搜索互联网,但没有运气 假设原始矩阵具有足够大的尺寸以便在适当位置旋转

{{1,2},{3,4},{5,6}}到{{5,3,1},{6,4,2}}

1 2

3 4

5 6

顺时针旋转到

5 3 1

6 4 2

感谢。

1 个答案:

答案 0 :(得分:1)

一种简单的方法是将矩阵左右或上下翻转(可以通过单个列或行的in-place reversing轻松完成)并进行就地矩阵换位,请参阅mcdowella的link。例如,参见Numpy的source code函数的rot90,它完成了这两个步骤(swapaxis基本上是一个转置)。

你可以一步完成所有事情,但这可能需要以某种螺旋模式迭代矩阵。这将花费相当多的努力来实现正确的,并且,考虑到交换和转置的高效算法(例如,针对高速缓存访​​问进行了优化)的可用性,这甚至可能更慢。