LeetCode 48. Rotate Image(旋转图片)

题目描述:

    You are given an n x n 2D matrix representing an image.
    Rotate the image by 90 degrees (clockwise).
    Note:
        You have to rotate the image in-place, which means you have to modify the input 2D matrix directly. DO NOTallocate another 2D matrix and do the rotation.

例子:

Given input matrix = 
[
  [1,2,3],
  [4,5,6],
  [7,8,9]
],

rotate the input matrix in-place such that it becomes:
[
  [7,4,1],
  [8,5,2],
  [9,6,3]
]

Given input matrix =
[
  [ 5, 1, 9,11],
  [ 2, 4, 8,10],
  [13, 3, 6, 7],
  [15,14,12,16]
], 

rotate the input matrix in-place such that it becomes:
[
  [15,13, 2, 5],
  [14, 3, 4, 1],
  [12, 6, 8, 9],
  [16, 7,10,11]
]

分析:

    题意:给定一个代表图片的n x n二维矩阵,返回它顺时针旋转90°之后的结果。要求空间复杂度为O(1)。

    思路:这是一道几何数学题,考察顺时针、逆时针旋转θ°的计算公式。我们这里运用三角函数的二角和差公式进行现场推导。

LeetCode 48    ① 由于此题是顺时针旋转90°,因此我们可以找到一种更为简单有效的方法:Ⅰ. 对于二维矩阵,先以为单位,进行反转;Ⅱ. 以元素为单位,进行转置运算。如以下例子所示:
    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
    ② 同理,遇到逆时针旋转90°,我们可以采用类似的方法:Ⅰ.  对于二维矩阵,先以为单位,进行反转;Ⅱ. 以元素为单位,进行转置运算。如以下例子所示:
    1 2 3            3 2 1            3 6 9
    4 5 6         6 5 4    →    2 5 8
    7 8 9            9 8 7            1 4 7

    ③ 如果遇到更一般的情况,那就必须用旋转公式进行计算了。

代码:

#include <bits/stdc++.h>  

using namespace std;  
  
class Solution {  
public:  
    void rotate(vector<vector<int>>& matrix) {  
        int n = matrix.size();  
        // Exceptional Case:   
        if(n == 0){  
            return;  
        }  
        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]);  
            }
        }  
    }  
};
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值