该方法允许旋转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;
}
答案 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) { ... }
。