矩阵的之字型遍历

熵烬
• 阅读 2538

题目:

给你一个包含 m x n 个元素的矩阵 (m 行, n 列), 求该矩阵的之字型遍历。

样例:

对于如下矩阵:
[
[1, 2, 3, 4],
[5, 6, 7, 8],
[9,10, 11, 12]
]
返回 [1, 2, 5, 9, 6, 3, 4, 7, 10, 11, 8, 12]

思路:

  • 画图可知,之走走法一共有四种步骤:右上;右平移一步;下平移一步;左下。
  • 走法的规律是:先右上,然后右平移或下平移一步(注意判断顺序);再左下,然后下平移或者右平移一步(注意判断顺序)
  • 注意: 右上和左下的步骤是要循环的(多次);右平移和下平移都只有一次。

参考答案:

class Solution {
public:
    /*
     * @param matrix: An array of integers
     * @return: An array of integers
     */
    vector<int> printZMatrix(vector<vector<int>> &matrix) {
        /*write your code here*/
        vector<int> res;
        if(matrix.empty())  return res;
        int m = matrix.size();
        /*if(m == 0)  return res;*/
        int n = matrix[0].size();
        /*if(n == 0) return res;*/
        res.push_back(matrix[0][0]);
        int i=1; //记录矩阵个数
        int row=0; //记录行
        int col=0; //记录列
        
        while(i < n*m){
            while(row-1>=0 && col+1<n){
                res.push_back(matrix[--row][++col]); //表示左上的走法
                i++;
            }
            if(col+1 < n){
                res.push_back(matrix[row][++col]); //表示向右平移一步的走法
                i++;
            }
            else if(row+1 < m){
                res.push_back(matrix[++row][col]); //向下移动一步的走法
                i++;
            }
            
            while(row+1<m && col-1>=0){
                res.push_back(matrix[++row][--col]); //表示右下的走法
                i++;
            }
            if(row+1<m){
                res.push_back(matrix[++row][col]); //表示向下移动一步的走法
                i++;
            }
            else if(col+1<n){
                res.push_back(matrix[row][++col]); //表示向右平移一步的走法
                i++;
            }
        }
        return res;
    }
};
点赞
收藏
评论区
推荐文章
Karen110 Karen110
4年前
图像中查找小图像的方法
如果有一副大图像和该大图像中截取的部分小图像,用人眼很容易找到小图像在大图像中的位置,但如果想通过电脑自动查找怎么解决呢?有2种方法,一种是直接通过图像矩阵的数据内容匹配进行查找,在一个大矩阵中查找对应小矩阵,这是精确匹配,要求小矩阵的所有元素与大矩阵中某部分的所有元素完全一致;另外一种就是OpenCVPython的HMT(hitandmisstransf
Python进阶者 Python进阶者
3年前
Python矩阵和Numpy数组的那些事儿
大家好,我是IT共享者,人称皮皮。今天给大家介绍矩阵和NumPy数组。一、什么是矩阵?使用嵌套列表和NumPy包的Python矩阵。矩阵是一种二维数据结构,其中数字按行和列排列。二、Python矩阵1\.列表视为矩阵Python没有矩阵的内置类型。但是,可以将列表的列表视为矩阵。例:A2\.如何使用嵌套列表。A三、NumPy数组1\.
放学路上 放学路上
3年前
python 矩阵转字符串,再转回矩阵
1、矩阵s转字符串sstr:sstrs.tostring()2、字符串sstr转矩阵s:importnumpyasnpsnp.fromstring(sstr,dtypefloat).reshape(矩阵s维度,矩阵s维度)
Karen110 Karen110
4年前
人工智能数学基础-线性代数4:矩阵及矩阵运算
一、矩阵定义矩阵(Matrix)是一个按照长方阵列排列的复数或实数集合,定义如下:由m×n个数aij排成的m行n列的数表称为m行n列的矩阵,简称m×n矩阵。记作:这m×n个数称为矩阵A的元素,简称为元,数aij位于矩阵A的第i行第j列,称为矩阵A的(i,j)元,以数aij为(i,j)元的矩阵可记为(aij)或(aij)m×n,m×
Stella981 Stella981
3年前
Opencv中Mat矩阵相乘——点乘、dot、mul运算详解
Opencv中Mat矩阵相乘——点乘、dot、mul运算详解2016年09月02日00:00:36 \牧野(https://www.oschina.net/action/GoToLink?urlhttps%3A%2F%2Fme.csdn.net%2Fdcrmg) 阅读数:59593
Wesley13 Wesley13
3年前
ARM内核矩阵计算教程(STM32)
我们在嵌入式上跑矩阵运算时候,会遇到这样一个问题。假设将矩阵设置成N\N维的二维数组后,我们想求两个矩阵相乘,那就需要按照矩阵计算规则编写矩阵相乘函数,这样的话4\4矩阵得编一个,5\5矩阵又得编一个,要求逆还得编一个,求行列式还得编。自己写的函数代码效率容易低,将导致本来要跑在单片机上的算法,难达到想象计算速度。这篇教程将教会你如何使用a
Wesley13 Wesley13
3年前
1050 螺旋矩阵
1050 螺旋矩阵 (25分)本题要求将给定的 N 个正整数按非递增的顺序,填入“螺旋矩阵”。所谓“螺旋矩阵”,是指从左上角第1个格子开始,按顺时针螺旋方向填充。要求矩阵的规模为 m 行 n 列,满足条件:m×n 等于 N;m≥n;且 m−n 取所有可能值中的最小值。输入格式:输入在第1行中给出一个正整数 N,第2行给出 N
Stella981 Stella981
3年前
OpenCV常用库函数[典]
_一、core_ 模块1、Mat基本图像容器     Mat 是一个类,由两个数据部分组成:矩阵头(包含矩阵尺寸,存储方法,存储地址等信息)和一个指向存储所有像素值的矩阵(根据所选存储方法的不同矩阵可以是不同的维数)的指针。        创建Mat对象方法:1.1Mat()构造函数:
Wesley13 Wesley13
3年前
R语言相关关系可视化函数梳理(附代码)
当考察多个变量间的相关关系时,通常将多个变量的两两关系以矩阵的形式排列起来,R提供了散点图矩阵、相关矩阵等多种可视化方案,囊括了众多函数。本文对R语言相关关系可视化的函数进行了初步梳理(全篇框架如下),后续大家可根据个人需求及函数功能择优选择。!ca2a37780049afa7173657f022b8b242bc816d00(https://yqfi
Stella981 Stella981
3年前
Leet Code 74 Search a 2D Matrix
写一个高效的算法,在m×n的二维矩阵中搜索一个值。矩阵有以下性质:每一行从左到右为升序。每一行的第一个数都比上一行最后一个数大。例如,有以下矩阵:\  \1,  3, 5, 7\,  \10,11,16,20\,  \23,30,34,50\\给定target3,返
Wesley13 Wesley13
3年前
CNN中常用的四种卷积详解
卷积现在可能是深度学习中最重要的概念。正是靠着卷积和卷积神经网络,深度学习才超越了几乎其他所有的机器学习手段。这期我们一起学习下深度学习中常见的卷积有哪些?1\.一般卷积卷积在数学上用通俗的话来说就是输入矩阵与卷积核(卷积核也是矩阵)进行对应元素相乘并求和,所以一次卷积的结果的输出是一个数,最后对整个输入输入矩阵进行遍历,
熵烬
熵烬
Lv1
沧海月明珠有泪,蓝田玉暖日生烟!此情可待成追忆,只是当时以惘然!
文章
3
粉丝
0
获赞
0