leetcode 矩阵旋转

来源:互联网 发布:尔雅网络课程登录入口 编辑:程序博客网 时间:2024/05/16 01:07

昨天做了矩阵旋转,刚开始思路不太对,还真想着要转呢。

后来才意识到不能真转,实现起来比较困难,就算真的实现了效率也不会高。然后还是学习了别人的方法,这里记录一下吧。

题目:给定1个n*n的二维数组,顺时针旋转这个数组。思路是将给定数组按行交换,第一行和最后一行互换,第二行和倒数第二行互换----然后求交换后矩阵的对称矩阵即可。

    1  2  3           7  8  9          7  4  1

    4  5  6    =>   4  5  6   =>   8  5  2

    7  8  9           1  2  3          9  6  3

对于3*3数组就是上面的过程,很直观很好操作。

代码:

void rotate(vector<vector<int> > &matrix){    reverse(matrix.begin(),matrix.end());    int size=matrix.size();     for(int i=0;i<size;++i)     {         for(int j=i+1;j<size;++j)         {             swap(matrix[i][j],matrix[j][i]);         }    }}

这个方法同样可以用于矩阵的逆时针旋转,只不过把第一步的交换行改变为交换列(交换列的实现要稍麻烦一点)。

代码:

void rotate(vector<vector<int> > &matrix){        auto row=matrix.begin();    for(;row!=matrix.end();++row)    {        reverse(row.begin(),row.end());    }    int size=matrix.size();    for(int i=0;i<size;++i)    {        for(int j=i+1;j<size;++j)        {            swap(matrix[i][j],matrix[j][i]);        }    }}


 

0 0
原创粉丝点击