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】不用额外空间,你会旋转一个矩阵吗?

MD_
发布了139 篇原创文章 · 获赞 8 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/qq_27690765/article/details/105388797