如何旋转二维数组?

如何旋转二维数组?

陈雷蒙德的职位,假设您有一个4x4二维数组,编写一个将其旋转90度的函数。Raymond链接到伪代码中的解决方案,但我想看到一些真实的东西。

[1][2][3][4]
[5][6][7][8]
[9][0][1][2]
[3][4][5][6]

变成:

[3][9][5][1]
[4][0][6][2]
[5][1][7][3]
[6][2][8][4]

更新尼克的回答是最直截了当的,但有没有办法比n^2做得更好呢?如果矩阵是10000x10000呢?


守候你守候我
浏览 764回答 3
3回答

慕沐林林

这里是C#int[,]&nbsp;array&nbsp;=&nbsp;new&nbsp;int[4,4]&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;1,2,3,4&nbsp;}, &nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;5,6,7,8&nbsp;}, &nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;9,0,1,2&nbsp;}, &nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;3,4,5,6&nbsp;}};int[,]&nbsp;rotated&nbsp;=&nbsp;RotateMatrix(array,&nbsp;4);static&nbsp;int[,]&nbsp;RotateMatrix(int[,]&nbsp;matrix,&nbsp;int&nbsp;n)&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;int[,]&nbsp;ret&nbsp;=&nbsp;new&nbsp;int[n,&nbsp;n]; &nbsp;&nbsp;&nbsp;&nbsp;for&nbsp;(int&nbsp;i&nbsp;=&nbsp;0;&nbsp;i&nbsp;<&nbsp;n;&nbsp;++i)&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for&nbsp;(int&nbsp;j&nbsp;=&nbsp;0;&nbsp;j&nbsp;<&nbsp;n;&nbsp;++j)&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ret[i,&nbsp;j]&nbsp;=&nbsp;matrix[n&nbsp;-&nbsp;j&nbsp;-&nbsp;1,&nbsp;i]; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;ret;}

拉丁的传说

O(n^2)时间与O(1)空间算法(没有任何解决办法,也没有时髦的东西!)旋转+90:转座子反转每一行轮换-90:方法1:转座子反转每一列方法2:反转每一行转座子旋转+180:方法1:旋转+90次两次方法2*反转每一行,然后反转每一列(转置)旋转180:方法1*轮调-90次两次方法2:反转每一列,然后反转每一行方法3*旋转+180,因为它们是相同的
打开App,查看更多内容
随时随地看视频慕课网APP