leetcode-48.旋转图像

1. 题目

leetcode题目链接

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

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

2. 编程

  1. 矩阵转置:
  • 遍历矩阵,将矩阵的行和列进行交换。这将实现矩阵的转置操作。
  1. 矩阵反转:
  • 遍历每一行,将行内元素从左到右进行反转。可以使用两个指针,一个从左边向右移动,一个从右边向左移动,同时交换元素,直到它们相遇。

这两个操作的组合将矩阵顺时针旋转90度。以下是具体的步骤:

  • 从左上角开始,交换 (i, j) 和 (j, i) 处的元素,其中 i 和 j 分别是行和列的索引。
  • 然后,对于每一行,使用两个指针 left 和 right,分别指向行的开头和结尾。反转该行上的元素,直到两个指针相遇。
  • 最终,矩阵就完成了顺时针旋转90度。
c 复制代码
#include <stdio.h>

void rotate(int** matrix, int matrixSize, int* matrixColSize) {
    // Step 1: Transpose the matrix
    for (int i = 0; i < matrixSize; i++) {
        for (int j = i; j < matrixSize; j++) {
            int temp = matrix[i][j];
            matrix[i][j] = matrix[j][i];
            matrix[j][i] = temp;
        }
    }
    
    // Step 2: Reverse each row
    for (int i = 0; i < matrixSize; i++) {
        int left = 0;
        int right = matrixSize - 1;
        while (left < right) {
            int temp = matrix[i][left];
            matrix[i][left] = matrix[i][right];
            matrix[i][right] = temp;
            left++;
            right--;
        }
    }
}

int main() {
    int matrixSize = 3;
    int matrixColSize[] = {3, 3};
    int** matrix = (int**)malloc(matrixSize * sizeof(int*));
    for (int i = 0; i < matrixSize; i++) {
        matrix[i] = (int*)malloc(matrixColSize[i] * sizeof(int));
    }

    // Fill the matrix with values
    int value = 1;
    for (int i = 0; i < matrixSize; i++) {
        for (int j = 0; j < matrixColSize[i]; j++) {
            matrix[i][j] = value++;
        }
    }

    // Rotate the matrix
    rotate(matrix, matrixSize, matrixColSize);

    // Print the rotated matrix
    for (int i = 0; i < matrixSize; i++) {
        for (int j = 0; j < matrixColSize[i]; j++) {
            printf("%d ", matrix[i][j]);
        }
        printf("\n");
    }

    // Clean up memory
    for (int i = 0; i < matrixSize; i++) {
        free(matrix[i]);
    }
    free(matrix);

    return 0;
}
相关推荐
Hali_Botebie1 分钟前
期望最大化算法,Expectation-Maximization Algorithm
算法
weixin_4684668511 分钟前
通义千问核心能力与实战表现深度评测
人工智能·深度学习·算法·ai·大模型
菜菜的顾清寒14 分钟前
力扣HOT100(48)图论-腐烂的橘子
算法·leetcode·图论
Ulyanov23 分钟前
深入QML滑块与进度控制:构建动态数据可视化界面:QML+PySide6现代开发入门(六)
开发语言·python·算法·ui·信息可视化·雷达电子对抗仿真
星马梦缘23 分钟前
ACM笔记 学习版本
数据结构·c++·算法
CQU_JIAKE25 分钟前
6.1【A】
算法
wayz1128 分钟前
Momentum:CTI(相关趋势指标)技术指标详解
算法·金融·数据分析·量化交易·特征工程
fengxin_rou29 分钟前
【滑动窗口与前缀和算法实战】:LeetCode560.438 高频题深度解析
java·算法·leetcode
Dillon Dong32 分钟前
【风电控制】FPGA vs DSP 在ADC采样中的选择——从架构差异到工程实践
算法·变流器·风电控制·dfig
科研小白_32 分钟前
【第九期:MATLAB点云处理基础】基于 Alpha Shapes 的边缘点提取
算法