修改允许二维阵列NxN旋转180度而不是仅90度?

时间:2015-03-22 09:04:38

标签: c#

该方法允许旋转90度,什么样的修改将允许它旋转180度。

方法:

public static int[,] RotateMatrix(int[,] matrix, int n)
    {
        int[,] ret = new int[n, n];

        for (int i = 0; i < n; ++i)
        {
            for (int j = 0; j < n; ++j)
            {
                ret[i, j] = matrix[n - j - 1, i];
            }
        }

        return ret;
    }

2 个答案:

答案 0 :(得分:1)

首先 - 你可以运行你的代码两次,以实现180的旋转。 另一种选择是使用这种方法:

public static int[,] RotateMatrix(int[,] matrix, int n)
    {
        int[,] ret = new int[n, n];

        for (int i = 0; i < n; ++i)
        {
            for (int j = 0; j < n; ++j)
            {
                ret[j, n - i - 1] = matrix[n - j - 1, i];
            }
        }

        return ret;
    }

我使用了您的方法,只修改了 ret 矩阵的索引。

这是你的意思吗?

答案 1 :(得分:0)

ret[i, j] = matrix[n - 1 - i, n - 1 - j];

您的方法应该检查matrix.GetLength(0)matrix.GetLength(1)。两者都至少应为n。如果您只想在两者同意的情况下使用该方法,然后轮换整个n×n矩阵,则可以省略n参数并使n成为本地变量

您还可以定义m = matrix.GetLength(0);n = matrix.GetLength(1);并旋转可能的非方形矩阵。

您可以使方法通用,public static TElement[,] RotateMatrix<TElement>(TElement[,] matrix) { ... }