题解 | #顺时针旋转矩阵#

顺时针旋转矩阵

http://www.nowcoder.com/practice/2e95333fbdd4451395066957e24909cc

题目主要信息:

  • 给定一个nnn*n的矩阵,返回其顺时针90度旋转后的结果

具体思路:

这道题可能需要将矩阵画出来,观察一下旋转后的规律: alt

乍一看没有啥规律,但是旋转后的第一行是不是与原矩阵的第一列很像,就是其翻转之后的结果,那我们可以再尝试画出一个顺时针90度旋转后每行翻转的矩阵: alt 然后我们会惊喜得发现,这就是互为转置的两个矩阵(转置矩阵为上三角矩阵元素与下三角矩阵元素依据对角线位置互换的矩阵)。因为转置的可逆性,只要过程逆转,就可以得到顺时针旋转90度后的矩阵了。

  • step 1:遍历矩阵的下三角矩阵,将其与上三角矩阵对应的位置互换,其实就是数组下标交换后的互换。
  • step 2:遍历矩阵每一行,将每一行看成一个数组使用reverse函数翻转。

代码实现:

class Solution {
public:
    vector<vector<int> > rotateMatrix(vector<vector<int> > mat, int n) {
        for(int i = 0; i < n; i++) //矩阵转置
            for(int j = 0; j < i; j++)
                swap(mat[i][j], mat[j][i]);
        for(int i = 0; i < n; i++) //每行翻转
            reverse(mat[i].begin(), mat[i].end());
        return mat;
    }
};

复杂度分析:

  • 时间复杂度:O(n2)O(n^2),转置需要遍历矩阵,逐行翻转也是O(n2)O(n^2)
  • 空间复杂度:O(1)O(1),没有使用额外辅助空间
孤帆远影碧空尽 文章被收录于专栏

牛客网各类题单题解~

全部评论

相关推荐

不愿透露姓名的神秘牛友
昨天 15:37
点赞 评论 收藏
分享
能干的三文鱼刷了10...:公司可能有弄嵌入式需要会画pcb的需求,而且pcb能快速直观看出一个人某方面的实力。看看是否有面试资格。问你问题也能ai出来,pcb这东西能作假概率不高
点赞 评论 收藏
分享
不愿透露姓名的神秘牛友
07-09 16:15
我应届生,去年10月份开始在这家公司实习,到今年10月份正好一年想(实习+试用期),在想要不要提前9月份就离职,这样好找工作些,但又差一个月满一年,又怕10月份国庆回来离职,容易错过了下半年的金九银十,到年底容易gap到年后
小破站_程序员YT:说这家公司不好吧,你干了快一年 说这家公司好吧,你刚毕业就想跑路说你不懂行情吧,你怕错过金九银十说 你懂行情吧,校招阶段在实习,毕业社招想换工作 哥们,我该怎么劝你留下来呢
应届生,你找到工作了吗
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务