题目描述
给出一个用二维矩阵表示的图像
返回该图像顺时针旋转90度的结果
扩展:
你能使用原地算法解决这个问题么?
思路:
1、获取矩阵的行数和列数,比如m行n列的矩阵顺时针旋转90度后就变成n行m列。
2、创建一个新数组other存放旋转后的数据。原矩阵按行按列依次扫描,把握住原矩阵和翻转后的矩阵对应关系是:other[j][row-i-1]=matrix[i][j]
3、最后将other中的元素依次赋值到matrix即可。
注意:原地算法要求改变原来的matrix,我本想通过更改引用的方式,但是无法通过测试。通过matrix=other这种方式直接让matrix舍弃原来的引用指向,从而指向other数组对象。这种方式是不行的,必须依次将matrix修改才行。
public class Solution {
public void rotate(int[][] matrix) {
int i, j;
int rows, colomns;
//java中获取二维数组行和列的方式
colomns = matrix[0].length;
rows = matrix.length;
int[][] other = new int[colomns][rows];
for (i = 0; i < rows; i++)
for (j = 0; j < colomns; j++) {
other[j][rows - i - 1] = matrix[i][j];
}
//修改原matrix
for (i = 0; i < rows; i++) {
for (j = 0; j < colomns; j++) {
matrix[i][j]=other[i][j];
}
}
//使用matrix=other这种方法取代上面的修改是不行的
}
}