我昨天问了一个用n * m旋转2d阵列的解决方案。 我将此链接作为答案:How do you rotate a two dimensional array?
我尽我所能,我认为它运作良好。是的,它适用于n * n数组,但如果n和m不同,我得到一个IndexOutOfBounds错误,我不知道为什么。
这是我的代码:
public void rot90DegRight(){
//get Matrix
this.Matrix = getMatrix();
int rows = Matrix.length;
int cols = Matrix[0].length;
// create a mirror of current matrix
RGBColor[][] mirror = getMatrix();
// create a new matrix
for (int i = 0; i < rows; i++){
for (int j = 0; j < cols; j++){
Matrix[j][rows - i - 1] = mirror[i][j];
}
}
// replace cols count with rows count
int tmp = rows;
rows = cols;
cols = tmp;
}
非常感谢您的帮助。
答案 0 :(得分:3)
因为,当您旋转2d数组时,行变为列,列成为行。只有当n == m时,才能在同一矩阵中旋转。 如果n!= m则需要声明一个新的2d数组。