1.思路:
旋转矩阵,第一行变为最后一列,第二行变为倒数第二列,以此类推,最后一行变为第一列。再分析其坐标变化规律,可以发现,[0,0]变为[0,2],[0,1]变为[1,2],[0,2]变为[2,2],由此可以看出,第一行变为最后一列时,列的索引保持为length-1-i,而行索引则从0递增,而再观察第二行,第三行均有此规律。
由此便可以新增一个空白矩阵,在两次循环中将变化的数据按照变化规律给写入即可。
代码如下:
public static void Rotate(int[][] matrix)
{
int[][] newMatrix= new int[matrix.Length][];
for (int i = 0; i < matrix.Length; i++)
{
newMatrix[i]= new int[matrix.Length];
}
int lenth=matrix.Length-1;
for (int i = 0; i < matrix.Length; i++)
{
for (int j = 0; j < matrix[i].Length; j++)
{
newMatrix[j][lenth - i] = matrix[i][j];// 将第01,02,03赋值给新数组的02,12,22
}
}
for (int i = 0; i < matrix.Length; i++)
{
for (int j = 0; j < matrix.Length; j++)
{
matrix[i][j] = newMatrix[i][j];
}
}
}
2.不新增数据,直接在矩阵里面变换坐标。
代码如下:
for (int i = 0; i < matrix.Length / 2; i++)
{
for (int j = i; j < matrix.Length - i - 1; j++)
{
int t = matrix[i][j];
matrix[i][j] = matrix[j][matrix.Length - 1 - i];
matrix[j][matrix.Length - 1 - i] = t;
t = matrix[i][j];
matrix[i][j] = matrix[matrix.Length - 1 - i][matrix.Length - 1 - j];
matrix[matrix.Length - 1 - i][matrix.Length - 1 - j] = t;
t = matrix[i][j];
matrix[i][j] = matrix[matrix.Length - 1 - j][i];
matrix[matrix.Length - 1 - j][i] = t;
}
}