我有一个旋转动态平方数组的类。我只需要平方旋转。目前,它只能向左旋转。我还需要它向右旋转。
这个答案提供了一个逆时针旋转的解决方案,我的修改版本低于我的需要,但我对如何反向做了很多。
Rotate M*N Matrix (90 degrees)
我可以调用RotateLeft()3x,但当然,这是低效的。我想了解另一种解决方案。
我的代码:
public void RotateLeft()
{
m_array = RotateMatrixCounterClockwise(m_array, m_width, m_height);
}
public void RotateRight()
{
}
public static T[] RotateMatrixCounterClockwise(T[] oldMatrix, int width, int height)
{
T[] newMatrix = new T[width * height];
int newColumn, newRow = 0;
for (int oldColumn = height - 1; oldColumn >= 0; oldColumn--)
{
newColumn = 0;
for (int oldRow = 0; oldRow < width; oldRow++)
{
newMatrix[newRow * width + newColumn] = oldMatrix[oldRow * width + oldColumn];
newColumn++;
}
newRow++;
}
return newMatrix;
}
解决方案:
感谢Daniel,这段代码将来可能对其他人有用。唯一改变的是内部块:
newMatrix[oldRow * width + oldColumn] = oldMatrix[newRow * width + newColumn];
完整代码:
public static T[] RotateMatrixClockwise(T[] oldMatrix, int width, int height)
{
T[] newMatrix = new T[width * height];
int newColumn, newRow = 0;
for (int oldColumn = height - 1; oldColumn >= 0; oldColumn--)
{
newColumn = 0;
for (int oldRow = 0; oldRow < width; oldRow++)
{
newMatrix[oldRow * width + oldColumn] = oldMatrix[newRow * width + newColumn];
newColumn++;
}
newRow++;
}
return newMatrix;
}
答案 0 :(得分:1)
交换oldRow
和newRow
的角色,类似于列。