首页 > 编程语言 >leetcode热题100(48. 旋转图像)简单清晰题解c++

leetcode热题100(48. 旋转图像)简单清晰题解c++

时间:2024-12-27 13:28:01浏览次数:9  
标签:遍历 matrix 48 int 题解 dfs 旋转 图像 热题

给定一个 × n 的二维矩阵 matrix 表示一个图像。请你将图像顺时针旋转 90 度。

你必须在 原地 旋转图像,这意味着你需要直接修改输入的二维矩阵。请不要 使用另一个矩阵来旋转图像。

示例 1:

输入:matrix = [[1,2,3],[4,5,6],[7,8,9]]
输出:[[7,4,1],[8,5,2],[9,6,3]]

示例 2:

输入:matrix = [[5,1,9,11],[2,4,8,10],[13,3,6,7],[15,14,12,16]]
输出:[[15,13,2,5],[14,3,4,1],[12,6,8,9],[16,7,10,11]]

提示:

  • n == matrix.length == matrix[i].length
  • 1 <= n <= 20
  • -1000 <= matrix[i][j] <= 1000

思路

通过观察,我们很容易发现,每次换的都是同一层的元素,这种每一层的遍历,我们可以直接使用dfs来写。 

很直观的一个规律就是 每一次都是顺时针进行更换每一行的元素,放到下每一列。那么我们只要遍历每一个点进行彼此交换,然后最后第一行的点跟最后一行最后一列的点交换,即可满足

代码

class Solution {
public:
    int n;
    void rotate(vector<vector<int>>& g) {
       int n = g.size();
       dfs(0,n-1,g);
    }

    void dfs(int l,int r,vector<vector<int>>& g){
        if(l>=r) return;
        int d = 0; //在这一层中遍历了几个元素了
        for(int i=l;i<r;i++){
            swap(g[l][i],g[l+d][r]);  //第一行的元素跟最后一列的元素交换
            swap(g[r-d][l],g[r][r-d]); //最后一行的元素跟第一列的元素交换
            swap(g[l][i],g[r][r-d]); //第一行的元素跟最后一行的元素交换
            d++;
        }
        dfs(l+1,r-1,g);
    }

};

标签:遍历,matrix,48,int,题解,dfs,旋转,图像,热题
From: https://blog.csdn.net/qq_63707333/article/details/144731321

相关文章

  • 题解:CF2051C Preparing for the Exam
    CF2051CPreparingfortheExam思路其实莫非就三种情况:所有题目都会:所有试卷也都会。有\(\ge2\)道题目不会:所有试卷都不会。有\(1\)道题目不会:假设这道题目是\(x\),那么遍历数组\(q\)寻找是否有\(q_i=x\),如果有则输出\(1\),否者输出\(0\)。AC代码时间复杂度为......
  • 题解:CF2051D Counting Pairs
    CF2051DCountingPairs思路首先给数组排个序,然后再暴力枚举\(i\),不难发现所有符合的\(j\)一定是连续的,所以再二分计算出符合数列的开头以及结尾。AC代码#include<bits/stdc++.h>usingnamespacestd;#defineN300005longlongt,n,x,y,a[N],ans,sum;intmain(){ ci......
  • 题解:CF2051B Journey
    CF2051BJourney思路先计算\(a,b,c\)都一定会走的次数,也就是\(n/(a+b+c)\),记结果\(num\),为然后再一个一个枚举:剩下的\(n=0\):答案为\(num\cdot3\)剩下的\(n\lea\):答案为\(num\cdot3+1\)剩下的\(a\ltn\lea+b\):答案为\(num\cdot3+2\)剩下的\(a+b\ltn\):答案为......
  • 2023年12月GESPC++四级真题解析
    一、单选题(每题2分,共30分)题目123456789101112131415答案ABDCCCABAADACBB1.下面有关函数参数的说法,正确的是()。A.函数参数传递时,主函数当中采用值传递方式将参数传递给子函数时,若子函数将参数值改变,主函数当中的参数值不变。B.函数参数传......
  • GTM148学习(抄书)笔记 [不定期更新]
    ContentsContentsChapterI.GroupsandHomomorphismsPermutationsCyclesFactorizationintoDisjointCyclesEvenandOddPermutationsSemigroupsGroupsHomomorphismsChapterI.GroupsandHomomorphismsPermutationsDefinition1.1.1If\(X\)isan......
  • 2023 年 9 月青少年软编等考 C 语言四级真题解析
    目录T1.酒鬼T2.大盗T3.核电站思路分析T4.盒子与小球之二思路分析T1.酒鬼此题为2021年3月四级第一题原题,见2021年3月青少年软编等考C语言四级真题解析中的T1。T2.大盗此题为2021年6月四级第二题原题,见2021年6月青少年软编......
  • CF1534G A New Beginning 题解
    题目传送门前置知识曼哈顿距离与切比雪夫距离的相互转化解法将切比雪夫距离转换成曼哈顿距离,有新坐标为\((\frac{x_{i}+y_{i}}{2},\frac{x_{i}-y_{i}}{2})\),因带一个\(\frac{1}{2}\)的常数不妨提出来得到\((x_{i}'=x_{i}+y_{i},y_{i}'=x_{i}-y_{i})\)最后统一乘起来。此......
  • IntelliJ IDEA 2024.3 安装教程与激活方法(附常见问题解决)
    IntelliJIDEA概述IntelliJIDEA是JetBrains公司推出的一款功能强大的Java集成开发环境(IDE),凭借其丰富的功能和工具集,极大地提升了开发者的编程效率和工作体验。温馨提示:本文中的方法仅供学习交流使用,如果条件允许,请支持正版软件。删除旧版本IntelliJIDEA如果您的电脑中已......
  • Loadrunner Controller cannot create Vusers.Ensure that your load...问题解决
    问题完成脚本录制后,直接打开Controller,选择保存的脚本,进行run,运行失败,提示:LoadrunnerControllercannotcreateVusers.Ensurethatyourloadgeneratorsareavailableandthatyourscriptarevalid. 原因第一次直接在controller中选择打开脚本,不能主动识别出本机可......
  • HNOI2016 序列 题解
    HNOI2016序列题解我做离线版本时往了偏序方向想,但是发现非常麻烦。直到看到了在线版本的容斥做法,发现既好写又跑得快。首先考虑容斥,我们不妨把一个询问\([L,R]\)中最小值的位置\(pos\)求出来。子区间跨过\(pos\),贡献即\((pos-L+1)\times(R-pos+1)\timesa_{pos}\)。......