Rotate Image

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?

C++实现代码:

#include<iostream>
#include<vector>
using namespace std;

class Solution
{
public:
    void rotate(vector<vector<int> > &matrix)
    {
        if(matrix.empty())
            return;
        vector<vector<int> > temp=matrix;
        int i,j;
        int n=matrix.size();
        for(i=0;i<n;i++)
        {
            for(j=0;j<n;j++)
            {
                matrix[j][n-i-1]=temp[i][j];
            }
        }
    }
};

int main()
{
    Solution s;
    vector<vector<int> > vec={{1,2,3},{4,5,6},{7,8,9}};
    s.rotate(vec);
    for(auto a:vec)
    {
        for(auto v:a)
            cout<<v<<" ";
        cout<<endl;
    }
}

 第二遍刷题,就地的方法。

例如,顺时针旋转,可以先将矩阵的上下分别交换,然后沿主对角线进行交换。

class Solution {
public:
    void rotate(vector<vector<int> > &matrix) {
        if(matrix.empty()||matrix[0].empty())
            return;
        int n=matrix.size();
        for(int i=0;i<n/2;++i)
            for(int j=0;j<n;++j)
                swap(&matrix[i][j],&matrix[n-1-i][j]);
        for(int i=0;i<n;++i)
            for(int j=0;j<i;++j)
            swap(&matrix[i][j],&matrix[j][i]);
    }
    void swap(int *a,int *b)
    {
        int tmp=*a;
        *a=*b;
        *b=tmp;
    }
};

 

posted @ 2014-11-21 10:05  Jessica程序猿  阅读(198)  评论(0编辑  收藏  举报