首页 > 代码库 > leetcode之图片(矩阵)旋转

leetcode之图片(矩阵)旋转

题目:

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);
            }
        }
    }
};


leetcode之图片(矩阵)旋转