今天在刷leetcode时偶遇一道比较有意思的小题:48. Rotate Image,图片翻转。题目的大概意思是,如果我们用一个n*n的二维矩阵来表示一个图片的话,我们如何将这个图片顺时针旋转90度。具体来说,是这样的:
1 2 3 7 4 1
4 5 6 --->> 8 5 2
7 8 9 9 6 3
在网上看了若干解决方法,都是旋转好几遍之类的,都没看懂。于是我突发奇想:如果先将矩阵转置,然后再将矩阵每一行里的元素翻转,好像结果是我们想要的。之所以称之为突发奇想就是并没有办法证明我的想法的科学性。。。Java代码如下。
public void rotate(int[][] matrix) {
int row = matrix.length;
for(int i = 0; i < row; ++i){
int col = matrix[i].length;
for(int j = i+1; j < col; ++j){
int tmp = matrix[i][j];
matrix[i][j] = matrix[j][i];
matrix[j][i] = tmp;
}
for(int start = 0, end = col-1; start < end; start++, end--){
int tmp = matrix[i][start];
matrix[i][start] = matrix[i][end];
matrix[i][end] = tmp;
}
}
}