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

【LeetCode】Rotate Image

时间:2014-05-29 23:02:38      阅读:254      评论:0      收藏:0      [点我收藏+]

标签:c   style   class   blog   code   java   

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?

 

最简单的想法,两重循环。

第一重循环是对于矩阵的层次(从外到内)

第二重循环是对于每一层次的四元素轮换

举例:

1 2 3

4 5 6

7 8 9

最外层:

1-->3-->9-->7

2-->6-->8-->4

最内层:

5

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

bubuko.com,布布扣

 

还有一种技巧性比较强的解法。

顺时针旋转90度可以分解为两步:

1、上下颠倒reverse

2、转置transpose

举例:

1 2 3

4 5 6

7 8 9

reverse之后

7 8 9

4 5 6

1 2 3

transpose之后

7 4 1

8 5 2

9 6 3

bubuko.com,布布扣
class Solution {
public:
    void rotate(vector<vector<int> > &matrix) 
    {
        int n = matrix.size();
        reverse(matrix.begin(), matrix.end());
        for (int i = 0; i < n; i ++)
            for (int j = i+1; j < n; j ++)
                swap (matrix[i][j], matrix[j][i]);
    }
};
bubuko.com,布布扣

bubuko.com,布布扣

【LeetCode】Rotate Image,布布扣,bubuko.com

【LeetCode】Rotate Image

标签:c   style   class   blog   code   java   

原文地址:http://www.cnblogs.com/ganganloveu/p/3758105.html

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