旋转矩阵

作者: Aristokrat | 来源:发表于2020-06-30 23:47 被阅读0次

题目描述:

给你一幅由 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]

]

来源:力扣(LeetCode)

链接:https://leetcode-cn.com/problems/rotate-matrix-lcci

题解:

该题目的数学描述为将一个N阶方形矩阵顺时针转动90°。

矩阵的顺时针旋转90°可以分解为先以反对角线为轴进行转置,再以水平中线为轴上下互换。

代码实现(C++和Go):

C++实现:

class Solution {

public:

    void rotate(vector<vector<int>>& matrix) {

        // 获取矩阵阶数

        int length = matrix.size();

        // 先按反对角线进行转置

        // 外层按行遍历

        for (int i = 0; i < length; ++i) {

            // 内层按列遍历,每次从左到右遍历的列索引不超过反对角线的列索引

            for (int j = 0; j < length -i; ++j) {

                swap(matrix[i][j], matrix[length - 1 -j][length - 1 - i]);

            }

        }

        // 再按中线进行上下互换

        // 外层循环只需到中线上的一列即可

        for (int i = 0; i < length / 2; ++i) {

            // 内层循环从第一列到最后一列

            for (int j = 0; j < length; ++j) {

                // 上下互换列的位置不变

                swap(matrix[i][j], matrix[length - 1 - i][j]);

            }

        }

    }

private:

    void swap(int &num1, int &num2) {

        int temp = num1;

        num1 = num2;

        num2 = temp;

    }

};

Go实现:

func rotate(matrix [][]int)  {

    length := len(matrix)

    for i := 0; i < length; i++ {

        for j := 0; j < length - i; j++ {

            matrix[i][j], matrix[length - 1 - j][length - 1 - i] = matrix[length - 1 - j][length - 1 - i], matrix[i][j]

        }

    }

    for i := 0; i < length / 2; i++ {

        for j := 0; j < length; j++ {

            matrix[i][j], matrix[length - 1 - i][j] = matrix[length - 1 - i][j], matrix[i][j]

        }

    }

}

相关文章

  • 基本变换矩阵

    1 平移变换 平移矩阵 T 平移后的新点 2 旋转矩阵 旋转矩阵用、、 分别表示 对一个绕任意轴旋转角度的旋转矩阵...

  • Houdini 克服恐惧之 | Matrix到底是个什么东西?

    Rotational Matrix | 旋转矩阵 不管是旋转矩阵还是移动矩阵,首先Matrix本质上只是一个矩阵...

  • 第四季 变换(二)

    0对于上篇旋转矩阵的扩充 如果我们有个旋转矩阵,旋转θ度,那矩阵如下 而如果我们旋转了 -θ度的话,由于三角函数 ...

  • 矩阵变换

    摘自:旋转变换(一)旋转矩阵 平移矩阵 tx表示:在x轴方向上平移距离ty表示:在y轴方向上的平移距离 旋转矩阵 ...

  • 证明罗德里格斯公式和四元数旋转等效

    证明旋转矩阵是正交矩阵。 答:首选明白旋转矩阵如何定义。旋转矩阵是描述同一个点在不同基坐标系下的坐标变换,两个坐标...

  • Eigen库旋转矩阵旋转向量欧拉角四元素

    旋转矩阵直接使用 Matrix3d 或 Matrix3f 旋转向量使用 AngleAxis 旋转矩阵和旋转向量的转...

  • 基础指令:旋转(Gener:Rotations)

    本节介绍了旋转运动的表示方法——旋转矩阵,以及如何创建较为复杂的旋转矩阵。 In the field of rob...

  • 矩阵旋转

    题目:给定一个 n × n 的二维矩阵表示一个图像。 将图像顺时针旋转 90 度。 说明: 你必须在原地旋转图像,...

  • 矩阵旋转

    python矩阵旋转方法: 一、方法论: 方法1、先逆序,再行列交换: zip(*matrix[::-1]) 方法...

  • 矩阵旋转

    LeetCode原题链接[https://leetcode-cn.com/problems/rotate-imag...

网友评论

    本文标题:旋转矩阵

    本文链接:https://www.haomeiwen.com/subject/lqzfqktx.html