【LeetCode】旋转矩阵

    技术2024-06-18  81

    01.文章目录

    文章目录

    01.文章目录02.问题描述03.思路04.代码实现05.总结

    02.问题描述

    矩阵是线性代数中的基本概念,说白了在编程中就是多维数组的体现。 旋转矩阵:通过旋转矩阵得到一个与原矩阵数据存储顺序不同的矩阵。

    给你一幅由 N × N 矩阵表示的图像,其中每个像素的大小为 4 字节。请你设计一种算法,将图像旋转 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] ]

    03.思路

    这里说一下思路,不增加额外空间,我其实也没想到怎么做,去搜了下,思路有了就好整了。 思路:先交换左右两边的数据,然后在交换对角线,对角线你怎么选择都是一样的,没区别。 这里用C语言和C++两种方式实现(只贴核心代码)

    04.代码实现

    C语言版 void rotate(int** matrix, int matrixSize, int* matrixColSize) { int* col = matrixColSize; int row = matrixSize; //左右交换 for(int i = 0; i < *col; i++) { for(int j = 0; j < row/2; j++) { int tmp = matrix[i][j]; matrix[i][j] = matrix[i][row-1-j]; matrix[i][row-1-j] = tmp; } } //对角线交换 for(int i = 0; i < *col; i++) { for(int j = 0; j < row-i; j++) { int tmp = matrix[i][j]; matrix[i][j] = matrix[*col-1-j][*col-1-i]; matrix[*col-1-j][*col-1-i] = tmp; } } } C++版 class Solution { public: void rotate(vector<vector<int>>& matrix) { int len=matrix[0].size(); for(int i=0;i<len;i++) //左右交换 { for(int j=0;j<len/2;j++) { int temp=matrix[i][j]; matrix[i][j]=matrix[i][len-1-j]; matrix[i][len-1-j]=temp; } } //对角线交换 for(int i=0;i<len;i++) { for(int j=0;j<len-i;j++) { int temp=matrix[i][j]; matrix[i][j]=matrix[len-1-j][len-1-i]; matrix[len-1-j][len-1-i]=temp; } } } };

    05.总结

    挺简单的,但是应该学过线代的人做这个会更简单吧。感觉C版本的第三个参数多余。 跟着思路就很简单,大家可以动手试试。 版权声明:转载请注明出处,谢谢!

    Processed: 0.010, SQL: 9