[leetcode] 【数组】48. Rotate Image

本文介绍了一种不使用额外空间旋转二维矩阵顺时针90度的方法,通过两步对称变换实现。此方法时间复杂度为O(n^2),空间复杂度为常数。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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?

题意

用二维数组表示一张2d图片,将图片顺时针旋转90°,不使用额外空间。

题解

1、由外往内一层层旋转,这样一定可以做出来,但是比较慢,而且代码比较繁琐。
2、通过对称的方法实现旋转。  对称方法1:沿副对角线对称变换,然后沿水平中线对称变换。
对称方法2:沿水平中线对称变换,然后沿主对角线变换。
方法二的时间复杂度为O(n^2),空间为常数。
class Solution {
public:
    void rotate(vector<vector<int>>& matrix) {
        int len=matrix.size();
        for(int i=0;i!=len-1;i++)
            for(int j=0;j<len-i-1;j++)
                swap(matrix[i][j],matrix[len-j-1][len-i-1]);
        for(int i=0;i!=len/2;i++)
            for(int j=0;j!=len;j++)
                swap(matrix[i][j],matrix[len-1-i][j]);
    }
};



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值