Rotate Image数组--力扣101算法题解笔记

11.2Rotate Image数组

题目描述

给定一个n * n 的矩阵,求它顺时针旋转90度的结果,且必须在原矩阵上修改,怎么样才能够尽量不创建额外存储空间?

输入输出样例

Input :

{{1,2,3},

{4,5,6},

{7,8,9}}

Output:

\[7,4,1\], \[8,5,2\], \[9,6,3\]

题解

核心逻辑:一圈一圈旋转 + 四个点一组交换

矩阵旋转,本质是每 4 个位置的数字循环换位

旋转规则(顺时针 90 度)

四个点的位置关系:顶部 → 右侧 → 底部 → 左侧 → 顶部

坐标怎么算?

n = 矩阵边长

  • 上:matrix[i][j]

  • 右:matrix[j][n-1-i]

  • 下:matrix[n-1-i][n-1-j]

  • 左:matrix[n-1-j][i]

交换过程(拿数字 1 举例)

  1. 先把顶部 1存起来

  2. 左边 7 移到上面

  3. 底部 9 移到左边

  4. 右边 3 移到底部

  5. 存好的 1 移到右边

cpp 复制代码
#include <iostream>
#include <vector>
using namespace std;

void rotate(vector<vector<int>>& matrix) {
    int n = matrix.size(); // 矩阵边长
    for (int i = 0; i < n / 2; ++i) {
        for (int j = i; j < n - i - 1; ++j) {
            // 保存顶部元素
            int temp = 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] = temp;
        }
    }
}

void printMatrix(vector<vector<int>>& matrix) {
    for (auto& row : matrix) {
        for (int num : row) {
            cout << num << " ";
        }
        cout << endl;
    }
}

int main() {
    vector<vector<int>> matrix = { {1,2,3},{4,5,6},{7,8,9} };

    cout << "旋转前:" << endl;
    printMatrix(matrix);

    rotate(matrix);

    cout << "\n旋转后(顺时针90度):" << endl;
    printMatrix(matrix);

    return 0;
}
相关推荐
计算机安禾9 小时前
【c++面向对象编程】第41篇:函数模板与类模板:泛型编程的基石
开发语言·c++·算法
SilentSamsara10 小时前
属性查找顺序:实例 → 类 → 父类的完整 MRO
开发语言·python·算法·青少年编程
不知名的老吴10 小时前
浅谈:树形动态规划中的换根技巧
算法·动态规划
一条大祥脚10 小时前
2021-2022 ICPC Southwestern Europe Regional Contest
算法·深度优先·图论
罗湖老棍子10 小时前
The xor-longest Path(信息学奥赛一本通- P1478)
算法·字符串·字典树··lca最近公共祖先
whuhewei10 小时前
React diff算法为什么是DFS,不是BFS
算法·react.js·深度优先
向日的葵00611 小时前
从IO视角深度对比:BST、红黑树、B树、B+树
数据结构·b树
EdmundXjs11 小时前
大模型核心概念解读
人工智能·算法
lookaroundd11 小时前
llm-compressor 普通量化调用链分析
python·算法
小羊在睡觉11 小时前
力扣239. 滑动窗口最大值
数据结构·后端·算法·leetcode·go