题目:
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?
思路:
题目的关键在in-place,否则就太容易了,为了达到in-place只能使用常熟变量的空间,通过类似两变量交换的方式进行多变量循环轮转,即a->b,b->c,c->a这种那个形式(->代表赋值),有了这种思路后,剩下的就是利用几何想象力想象矩阵中的每个节点是如何旋转的了,并需要总结出旋转九十度前后的横纵坐标关系,关系如下:(i,j)->(j,N-1-i),其中N为矩阵的size,剩下的就是要注意旋转时怎么取边进行循环了,只要不要搞出无限循环,随便从哪一边开始都是可以的,从代码量也可以看出这题很简单了,呵呵。
代码;
class Solution {
public:
void pointcirclerotate(vector<vector<int> > &matrix, int i, int j)
{
int msize=matrix.size();
int tmp=matrix.at(i).at(j);
matrix.at(i).at(j)=matrix.at(msize-1-j).at(i);
matrix.at(msize-1-j).at(i)=matrix.at(msize-1-i).at(msize-1-j);
matrix.at(msize-1-i).at(msize-1-j)=matrix.at(j).at(msize-1-i);
matrix.at(j).at(msize-1-i)=tmp;
}
void rotate(vector<vector<int> > &matrix) {
int i,j,tmp;
int msize=matrix.size();
for(i=0;i<msize/2;i++)
{
for(j=i;j<msize-1-i;j++)
{
pointcirclerotate(matrix,i,j);
}
}
}
};原文:http://blog.csdn.net/xunileida/article/details/42130707