Leetcode 面试题01.07. 旋转矩阵【不占额外内存空间】

问题描述

给你一幅由给你一幅由 N × N 矩阵表示的图像,其中每个像素的大小为 4 字节。请你设计一种算法,将图像旋转 90 度。

不占用额外内存空间能否做到?

解题报告

模拟一遍旋转过程,我们发现位置(i,j)上的元素旋转90度得到(j,n-1-i),而位置(j,n-1-i)上的元素旋转90度得到(n-1-i,n-1-j),位置(n-1-i,n-1-j)上的元素旋转90度得到(n-1-j,i),最后位置(n-1-j,i)上的元素旋转到(i,j)。【就是一个元素旋转360度就回到原本的位置】

所以我们只需枚举左上角1/4的矩阵大小,研究将遍历的元素和其相关的四个元素交换位置。

实现代码

class Solution {
public:
    void rotate(vector<vector<int>>& matrix) {
        int n=matrix.size();
        for(int i=0;i<n/2;i++){
            for(int j=0;j<(n+1)/2;j++){
                int tmp=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]=tmp;
            }
        }
    }
};

参考资料

[1] Leetcode 面试题01.07. 旋转矩阵
[2] 【每日算法Day93】不用额外空间,你会旋转一个矩阵吗?

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值