20 旋转图像

给定一个 n × 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
思路1

1、判断二维矩阵的参数的合法性

2、新记录二维矩阵的行和列m、n

3、建立一个新的二维矩阵。

4、将旧二维矩阵的行放到新二维矩阵的列中

思路2

1、以旋转的思路,一圈一圈的进行旋转

2、先旋转外圈的数字,在旋转内圈的数字

3、不创建额外数字的情况下

4、必须要一个数字一个数字的旋转,因为旋转会覆盖下一个数字原本的值

5、必须要先保存当前数字的值,然后旋转一圈,在循环下一个数字。

6、判断需要循环多少圈=》如果列数是双数,直接用列数/2,如果是单数,则列数/2+1。

cpp 复制代码
//旋转图像
void rotate_cycle(vector<vector<int>>& matrix,int top,int bottom,int left,int right){
    int m=matrix.size();
    if(0==m) return;
    int n=matrix[0].size();
    if(0==n) return;
    if(top<0||bottom<0||left<0||right<0||bottom<top||right<left) return;
    
    int temp;
    for(int i=left;i<right;i++){
        temp=matrix[top][i];
        matrix[top][i]=matrix[m-i-1][left];
        matrix[m-i-1][left]=matrix[bottom][n-i-1];
        matrix[bottom][n-i-1]=matrix[i][right];
        matrix[i][right]=temp;
    }
}

void rotate(vector<vector<int>>& matrix) {
    int m=matrix.size();
    if(0==m) return;
    int n=matrix[0].size();
    if(0==n) return;

    vector<vector<int> > newMat(m,vector<int>(n,-1));

    int max_cycle=m>n?n:m;
    int cycle=max_cycle/2+max_cycle%2;
    int top=0,bottom=m-1,left=0,right=n-1;
    for(int i=0;i<cycle;i++){
        rotate_cycle(matrix,top++,bottom--,left++,right--);
    }
}

推荐一个零声教育学习教程,个人觉得老师讲得不错,分享给大家:[Linux,Nginx,ZeroMQ,MySQL,Redis,fastdfs,MongoDB,ZK,流媒体,CDN,P2P,K8S,Docker,TCP/IP,协程,DPDK等技术内容,点击立即学习:链接

相关推荐
Chester_19992 小时前
CSP202203C.计算资源调度器
开发语言·数据结构·c++·蓝桥杯
裕晟资质规划4 小时前
武器装备科研生产单位保密资质申请方法论:条件模型与流程拆解
人工智能·算法
会周易的程序员4 小时前
给 PLC 写一个字节码虚拟机:STVM 虚拟机架构设计
开发语言·c++·虚拟机·软plc·iec61131·stvm
小灰灰搞电子4 小时前
完全驾驭 Qt 与数据库:C++ ORM 框架 QxOrm 原理与实践指南
数据库·c++·qt
QT界面美化性能优化4 小时前
QT+AI:使用AI技术为QT应用程序赋能
c++·人工智能·qt·opencv·qt教程·qt6.3
en.en..5 小时前
C语言 标准输入 / 输出缓冲区
算法
吃好睡好便好7 小时前
查找函数的使用
学习·算法·matlab·生活·查找函数
学习星球7 小时前
单调栈——从“找下一个更大的“到柱状图中的最大矩形
数据库·c++·算法·leetcode·xcode
小灰灰搞电子7 小时前
C++ 引用折叠详解
c++
靠沿8 小时前
贪心算法专题(二)
算法·贪心算法