标签搜索

目 录CONTENT

文章目录

旋转图像.md

小小城
2021-08-22 / 0 评论 / 0 点赞 / 5 阅读 / 1,245 字 / 正在检测是否收录...
温馨提示:
本文最后更新于 2022-05-02,若内容或图片失效,请留言反馈。部分素材来自网络,若不小心影响到您的利益,请联系我们删除。

旋转图像

@[toc]

一、题目描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

分析

在这里插入图片描述

方法一:旋转 + 翻转

  •  第一步以对角线为轴,翻转对角线两侧的元素
  •  第二部以每行的中点为轴翻转左右两次的元素

在这里插入图片描述

在这里插入图片描述

代码

class Solution {
public:
    void rotate(vector<vector<int>>& matrix) {
		//按对角线进行翻转	
        for(int i = 0;i < matrix.size();i++)
        {
            for(int j = i;j < matrix.size();j++)
            {
                swap(matrix[i][j],matrix[j][i]);
            }
        }

		//每行进行翻转
        for(auto& e : matrix)
        {
            reverse(e.begin(),e.end());
        }
    }
};

方法二:逐层逐位置偏移

在这里插入图片描述

  •  对每个‘相同位置‘的元素进行旋转,即对应图中每种颜色对元素
  •  当一层旋转完成后,进入内层继续进行对应位置元素的旋转

对应坐标变换图:
在这里插入图片描述
在这里插入图片描述

代码

class Solution {
public:
    void rotate(vector<vector<int>>& matrix) {
        int pos1 = 0;
        int pos2 = matrix[0].size() - 1;

		//结束条件是只有一个元素的时候
        while (pos1 < pos2)
        {
            int add = 0;
            //注意add的范围
            while (add < pos2 - pos1)
            {
            	//旋转对应位置的4个元素
            	int temp = 0;
                temp = matrix[pos1][pos1 + add];
                matrix[pos1][pos1 + add] = matrix[pos2 - add][pos1];
                matrix[pos2 - add][pos1] = matrix[pos2][pos2 -add];
                matrix[pos2][pos2 -add] = matrix[pos1 + add][pos2];
                matrix[pos1 + add][pos2] = temp;
                add++;
            }
            
            //进入矩阵的内一层继续对应位置的旋转
            pos1++;
            pos2--;
        }
    }
};

或:

class Solution {
public:
    void rotate(vector<vector<int>>& matrix) {
        int n = (int)matrix.size();

        //(n + 1) / 2为总的循环次数,也就是层数,每一圈旋转完毕后矩阵缩小一圈,
        // + 1的目的是向上取整
        for (int i = 0; i < (n + 1) / 2; i ++) 
        {
            //j可以理解为add
            for (int j = 0; j < n / 2; j++) 
            {
                int temp = matrix[n - 1 - j][i];
                matrix[n - 1 - j][i] = matrix[n - 1 - i][n - j - 1];
                matrix[n - 1 - i][n - j - 1] = matrix[j][n - 1 -i];
                matrix[j][n - 1 - i] = matrix[i][j];
                matrix[i][j] = temp;
            }
        }
    }
};

0

评论区