首页 > 其他分享 >54. 螺旋矩阵

54. 螺旋矩阵

时间:2023-08-01 11:15:10浏览次数:38  
标签:遍历 边界 螺旋 int 54 矩阵 ans matrix

给你一个 m 行 n 列的矩阵 matrix ,请按照 顺时针螺旋顺序 ,返回矩阵中的所有元素。

示例 1:


输入:matrix = [[1,2,3],[4,5,6],[7,8,9]]
输出:[1,2,3,6,9,8,7,4,5]

> 思路

  1. 首先设定上下左右边界
  2. 其次向右移动到最右,此时第一行因为已经使用过了,可以将其从图中删去,体现在代码中就是重新定义上边界
  3. 判断若重新定义后,上下边界交错,表明螺旋矩阵遍历结束,跳出循环,返回答案
  4. 若上下边界不交错,则遍历还未结束,接着向下向左向上移动,操作过程与第一,二步同理
  5. 不断循环以上步骤,直到某两条边界交错,跳出循环,返回答案

> 代码


class Solution {
public:
    vector<int> spiralOrder(vector<vector<int>>& matrix) {
        vector <int> ans;
        if(matrix.empty()) return ans; //若数组为空,直接返回答案
        int u = 0; //赋值上下左右边界
        int d = matrix.size() - 1;
        int l = 0;
        int r = matrix[0].size() - 1;
        while(true)
        {
            for(int i = l; i <= r; ++i) ans.push_back(matrix[u][i]); //向右移动直到最右
            if(++ u > d) break; //重新设定上边界,若上边界大于下边界,则遍历遍历完成,下同
            for(int i = u; i <= d; ++i) ans.push_back(matrix[i][r]); //向下
            if(-- r < l) break; //重新设定有边界
            for(int i = r; i >= l; --i) ans.push_back(matrix[d][i]); //向左
            if(-- d < u) break; //重新设定下边界
            for(int i = d; i >= u; --i) ans.push_back(matrix[i][l]); //向上
            if(++ l > r) break; //重新设定左边界
        }
        return ans;
    }
};

标签:遍历,边界,螺旋,int,54,矩阵,ans,matrix
From: https://www.cnblogs.com/lihaoxiang/p/17595921.html

相关文章

  • POJ 1548 Robots
    \(POJ\)\(1548\)\(Robots\)题意相当于给出\(N\)个坐标点,因为机器人只能向下或者向右走,所以如果能到达其他点,则连接这两个点,即line[i][j]=1最小路径覆盖数:对于一个\(DAG\)(有向无环图),选取最少条路径,使得每个顶点属于且仅属于一条路径。路径长度可以为零;(有向图中找一些路径,使......
  • 矩阵
    请使用C++实现矩阵的各种运算1、矩阵创建2、矩阵相加3、矩阵相减4、矩阵相乘5、数字乘矩阵6、矩阵上叠加7、矩阵左右叠加8、矩阵转置9、矩阵旋转10、矩阵求逆11、矩阵输出usingnamespacestd;intline;intcolumn;intline2;intcolumn2;intmatrix2[100][100];......
  • 【暑假例题】20230727 矩阵基本运算(C++)
    题目请使用C++实现矩阵的各种运算矩阵创建矩阵相加矩阵相减矩阵相乘数字乘矩阵矩阵上叠加矩阵左右叠加矩阵转置矩阵旋转矩阵求逆矩阵输出题目分析矩阵创建这里只需注意由于我们需要通过不同的函数对数组进行操作,所以我们需要将数组存储在容器或者使用指针防止数......
  • ARC154
    ARC154A似乎是均值反着用,直接最大乘最小即可#include<bits/stdc++.h>usingnamespacestd;constintMOD=998244353;intn;stringA,B;intmain(){//freopen("date.in","r",stdin);//freopen("date.out","w",stdout);......
  • 矩阵的基本运算
    题目:矩阵的基本运算1、矩阵创建2、矩阵相加3、矩阵相减4、矩阵相乘5、数字乘矩阵6、矩阵上叠加7、矩阵左右叠加8、矩阵转置9、矩阵旋转10、矩阵求逆11、矩阵输出运用知识1.动态内存分配是一种在程序运行时动态地分配内存空间的机制。与静态内存分配相比,动态内存分配......
  • python 矩阵自我复制
    Python矩阵自我复制实现指南作为一名经验丰富的开发者,我将带领你学习如何实现"Python矩阵自我复制"。在本文中,我们将使用Python编程语言来实现这个功能。首先,让我们来看一下整个实现的流程。实现流程下面是实现"Python矩阵自我复制"的步骤:步骤描述1创建一个矩阵2......
  • python 矩阵 第一列
    如何实现Python矩阵第一列作为一名经验丰富的开发者,我很乐意教会刚入行的小白如何实现Python矩阵的第一列。下面是详细的步骤和相应的代码示例。步骤步骤一:创建一个矩阵首先,我们需要创建一个矩阵。在Python中,我们可以使用列表(List)来表示矩阵。下面是一个示例矩阵:matrix......
  • 矩阵的基本运算
    矩阵的基本运算1、矩阵创建2、矩阵相加3、矩阵相减4、矩阵相乘5、数字乘矩阵6、矩阵上叠加7、矩阵左右叠加8、矩阵转置9、矩阵旋转10、矩阵求逆11、矩阵输出主要运用的知识点:掌握二维指针的动态分配内存下面举一个简单的例子来理解二维指针的动态分配内存#include......
  • numpy-线代和矩阵
    numpy-线代和矩阵目录numpy-线代和矩阵创建(转换)矩阵矩阵运算np.linalg线代函数库np.matlib矩阵函数库参考资料创建(转换)矩阵一般我们先创建数组,然后将其转化为矩阵np.mat(data,dtype=None)data:数据或者数组dtype:数据格式importnumpyasnparr1=np.array(......
  • ARC154 E
    非常好题目!!!求和不好搞的话,我们先把他转成期望!最后再乘上\((\frac{n(n+1)}{2})^m\)。然后拆贡献,考虑\(i\)的系数:\[\sum_{j\lti}[P_j\gtP_i]-\sum_{j\gti}[P_j\ltP_i]\]然后是特别波特的一步!这个东西对于所有排列都满足,所以在其它题看到类似地结构也可以联想:\[\sum_{j\l......