题目:
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); } } } };
时间: 2024-10-13 06:38:44