对角线遍历

题目:给定一个含有 M x N 个元素的矩阵(M 行,N 列),请以对角线遍历的顺序返回这个矩阵中的所有元素,对角线遍历如下图所示。

说明:

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

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

思路:观察规律,主要思考这个矩阵是怎么遍历的,遍历方向如何,研究可得,遍历方向由元素所在行列和决定,为偶数向上,奇数向下。

所以,即先创建空列表,然后append迭代添加即可。 还是自己多画图找规律。

class Solution:
    def findDiagonalOrder(self, matrix: List[List[int]]) -> List[int]:
        if(matrix==[]):
            return []
        r=0
        c=0
        row=len(matrix)
        col=len(matrix[0])
        a=row*col
        res=[]
        for i in range(a):
            res.append(matrix[r][c])
            if((r+c)%2==0):
                if(c==col-1):
                    r=r+1
                elif(r==0):
                    c=c+1
                else:
                    r=r-1
                    c=c+1
            else:
                if(r==row-1):
                    c=c+1
                elif(c==0):
                    r=r+1
                else:
                    r=r+1
                    c=c-1
        return res

这里,编写时出了俩错,

第一个:r=0,c=0 不能这么写,应该改为r,c=0,0

第二个:python里面没有自增,自减;因为自增自减改变了对象本身,而Python的模型规定,数值对象是不可改变的。

第三个:if elif要对齐才表示一个嵌套内

原文地址:https://www.cnblogs.com/dmndxld/p/10807662.html

时间: 2024-07-30 12:14:57

对角线遍历的相关文章

【LeetCode】4.Array and String — Diagonal Traverse 对角线遍历

Given a matrix of M x N elements (M rows, N columns), return all elements of the matrix in diagonal order as shown in the below image. Example: Input: [ [ 1, 2, 3 ], [ 4, 5, 6 ], [ 7, 8, 9 ] ] Output: [1,2,4,7,5,3,6,8,9] Explanation: Note: The total

498. Diagonal Traverse 对角线遍历矩阵

Given a matrix of M x N elements (M rows, N columns), return all elements of the matrix in diagonal order as shown in the below image. Example: Input: [ [ 1, 2, 3 ], [ 4, 5, 6 ], [ 7, 8, 9 ] ] Output: [1,2,4,7,5,3,6,8,9] Explanation: Note: The total

简易的杨辉三角

利用二维数组,可以更加清晰的理解杨辉三角的规律: 将二维数组看成表格形式,总结杨辉三角规律如上. 代码: #include <stdio.h> void main(){ int num[10][10]; //获取一个二维数组 int i,j;     //变量(下标) i,j .分别控制行与列 for(i=0;i<10;i++){  // 下标从 0 开始 num[i][0]=1;   //第一列的数字都为 1 num[i][i]=1;   //两变量相等时(对角线)数值为 1 } fo

leet

# 题名1 两数之和    2 两数相加    3 无重复字符的最长子串    4 寻找两个有序数组的中位数    5 最长回文子串    6 Z 字形变换    7 整数反转    8 字符串转换整数 (atoi)    9 回文数    10 正则表达式匹配    11 盛最多水的容器    12 整数转罗马数字    13 罗马数字转整数    14 最长公共前缀    15 三数之和    16 最接近的三数之和    17 电话号码的字母组合    18 四数之和    19 删除链表

算法:Z字型(Zigzag)编排

问题:给定 n 行和 m 列的二维数组矩阵.如图所示,以 ZIG-ZAG 方式打印此矩阵. 从对称的角度来看,通过反复施加滑行反射可以从简单的图案如线段产生规则的之字形. 主要思想:算法从(0, 0)位置开始水平向右遍历,当到达(0, 1)时沿着反对角线方向左下遍历(利用一个变量控制左下右上方向),内层循环一直遍历到碰到边缘时row++,方向改为右上,沿着反对角线碰到矩阵上边缘时col++,方向变为左下遍历,知道上半部分(包括反对角线遍历完):遍历完半个矩阵(可能是子方矩阵)后,根据当前 row

C#与数据结构--图的遍历

C#与数据结构--图的遍历 8.2 图的存储结构 图 的存储结构除了要存储图中各个顶点的本身的信息外,同时还要存储顶点与顶点之间的所有关系(边的信息),因此,图的结构比较复杂,很难以数据元素在存储区 中的物理位置来表示元素之间的关系,但也正是由于其任意的特性,故物理表示方法很多.常用的图的存储结构有邻接矩阵.邻接表.十字链表和邻接多重表. 8.2.1  邻接矩阵表示法 对于一个具有n个顶点的图,可以使用n*n的矩阵(二维数组)来表示它们间的邻接关系.图8.10和图8.11中,矩阵A(i,j)=1

存储结构与邻接矩阵,深度优先和广度优先遍历及Java实现

如果看完本篇博客任有不明白的地方,可以去看一下<大话数据结构>的7.4以及7.5,讲得比较易懂,不过是用C实现 下面内容来自segmentfault 存储结构 要存储一个图,我们知道图既有结点,又有边,对于有权图来说,每条边上还带有权值.常用的图的存储结构主要有以下二种: 邻接矩阵 邻接表 邻接矩阵 我们知道,要表示结点,我们可以用一个一维数组来表示,然而对于结点和结点之间的关系,则无法简单地用一维数组来表示了,我们可以用二维数组来表示,也就是一个矩阵形式的表示方法. 我们假设A是这个二维数组

递归算法求解遍历(或穷举)问题

递归问题可以理解为遍历问题,必须遍历出所有的数据来,才能进行相应的运算,比如Fibonacci问题.阶乘问题,必须把每一步的值都遍历出来,然后才能做加法或乘法. 递归算法解决问题的特点: (1) 必须有一个明确的递归结束条件,称为递归出口. (2) 根据当前状态的值推断下一个状态值的个数n与条件,本次递归调用将根据条件调用n个自身(根据条件,遍历不同分支,如二叉树中前序.中序和后序遍历). 递归算法优缺点:借助递归方法,我们可以把一个相对复杂的问题转化为一个与原问题相似的规模较小的问题来求解,递

javascript实现数据结构: 树和二叉树的应用--最优二叉树(赫夫曼树),回溯法与树的遍历--求集合幂集及八皇后问题

赫夫曼树及其应用 赫夫曼(Huffman)树又称最优树,是一类带权路径长度最短的树,有着广泛的应用. 最优二叉树(Huffman树) 1 基本概念 ① 结点路径:从树中一个结点到另一个结点的之间的分支构成这两个结点之间的路径. ② 路径长度:结点路径上的分支数目称为路径长度. ③ 树的路径长度:从树根到每一个结点的路径长度之和. 以下图为例: A到F :结点路径 AEF : 路径长度(即边的数目) 2 : 树的路径长度:3*1+5*2+2*3=19: ④ 结点的带权路径长度:从该结点的到树的根结