题目描述
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?
其实题目更好理解为顺时针旋转一个矩阵的下标90°。
关键是要把下标计算好,原矩阵的数值应该对应到新的旋转矩阵的那个位置,设计好公式就很容易计算了。
有图好理解,矩阵如下图:
有两个思路:
1 原矩阵计算出各个数值在新矩阵中的位置,然后一步到位转换成新的旋转矩阵
2 原矩阵到转置矩阵是很容易计算的,那么从转置矩阵到选择矩阵就只需要reverse每行的元素就可。
这里选择第二种方法;
实现代码:
class Solution {
public:
void rotate(vector<vector<int> > &matrix) {
int n=matrix.size();
for(int i=0;i<n;++i)
{
for(int j=i+1;j<n;++j)
{
swap(matrix[i][j],matrix[j][i]); //转置矩阵;
}
reverse(matrix[i].begin(),matrix[i].end()); //翻转每一行;
}
}
};