题目描述:
You are given an n x n 2D matrix representing an image.
Rotate the image by 90 degrees (clockwise).
Follow up:
Could you do this in-place?
题意理解:*
将一个n*n的矩阵顺时针旋转90°。(不开辟新的内存)
解题思路:
此题的难点是坐标的变换。先将原始二维矩阵写下来,再写出旋转之后的二维矩阵,分析元素的变动。(写写划划有助于理清思路!)纯旋转感觉有点绕,一直没绕清来着。。
解法1:
参考解题思路后,发现可以通过先转置,再对行逆序,即得到旋转后的矩阵。思路清楚了,自己用代码实现吧。(思路太重要了!!)
class Solution {
public:
void rotate(vector<vector<int> > &matrix) {
for (int i=0; i<matrix.size(); i++)
{
for (int j=0; j<i; j++)
{
// int tmp = matrix[i][j];
// matrix[i][j] = matrix[j][i];
// matrix[j][i] = tmp;
swap(matrix[i][j], matrix[j][i]);
}
}
for (int i=0; i<matrix.size(); i++)
reverse(matrix[i].begin(), matrix[i].end());
}
};
这里主要用到了两个c++自带函数swap和reverse。
(好吧,我一开始用的是纯手工实现来着…还是不够熟悉c++)
解法2:
另一种思路是先上下对折,再转置。代码实现很简单啦。