码迷,mamicode.com
首页 > 其他好文 > 详细

LeetCode:Rotate Image

时间:2014-06-05 16:56:29      阅读:228      评论:0      收藏:0      [点我收藏+]

标签:c   style   class   blog   code   a   

题目链接

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?


不使用额外的空间顺时针旋转方阵90度

例如

bubuko.com,布布扣  旋转后变为bubuko.com,布布扣

 

算法1

先将矩阵转置,然后把转置后的矩阵每一行翻转

bubuko.com,布布扣    转置变为   bubuko.com,布布扣   每一行翻转变为 bubuko.com,布布扣

1
2
3
4
5
6
7
8
9
10
11
12
13
14
class Solution {
public:
    void rotate(vector<vector<int> > &matrix) {
        int n = matrix.size();
        //转置
        for(int i = 0; i < n; i++)
            for(int j = i+1; j < n; j++)
                swap(matrix[i][j] , matrix[j][i]);
        //每一行翻转
        for(int i = 0; i < n; i++)
            for(int j = 0; j < (n>>1); j++)
                swap(matrix[i][j], matrix[i][n-j-1]);
    }
};

 

算法2

可以见矩阵看成多个环组成,如下4*4的矩阵包括两个环,第一个环为1,2,3,4,8,12,16,15,14,13,9,5,1,第二个环为6,7,11,10。

bubuko.com,布布扣

旋转一个矩阵,相当于把每一个环都旋转。如何旋转一个环呢?以最外层的环举例:                      本文地址

旋转前:bubuko.com,布布扣 ,旋转后:bubuko.com,布布扣

 

我们把环分成3组:{1,4,16,13},{2,8,15,9},{3,12,14,5},每一组中:旋转后相当于把原来的数字移动到同组中下一个数字的位置

 

对于一个n*n的矩阵可以分成n/2(向上取整)个环来旋转;对于边长为len的环,可以分成len-1组来旋转。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
class Solution {
public:
    void rotate(vector<vector<int> > &matrix) {
        int n = matrix.size();
        if(n == 0)return;
        for(int i = 0, len = n; i < n/2; i++, len -= 2)
        {//n/2 为旋转的圈数,len为第i圈中正方形的边长
            int m = len - 1;
            for(int j = 0; j < m; j++)
            {
                int tmp = matrix[i][i+j];
                matrix[i][i+j] = matrix[i+m-j][i];
                matrix[i+m-j][i] = matrix[i+m][i+m-j];
                matrix[i+m][i+m-j] = matrix[i+j][i+m];
                matrix[i+j][i+m] = tmp;
            }
        }
    }
};

【版权声明】转载请注明出处:http://www.cnblogs.com/TenosDoIt/p/3768734.html

LeetCode:Rotate Image,布布扣,bubuko.com

LeetCode:Rotate Image

标签:c   style   class   blog   code   a   

原文地址:http://www.cnblogs.com/TenosDoIt/p/3768734.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!