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

示例:

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

说明:

  1. 给定矩阵中的元素总数不会超过 100000 。

//章节 - 数组和字符串
//二、二维数组简介
//1.对角线遍历
/*
算法思想:
有类题属于直观上很好理解,但是写起来却不知如何下手。这题就属于此类。
这道题好处是给了一个图例,而图例又不像另一种4向(右,左下,下,右上)画法让人误导,而是对角线,方向是右上、左下依次交替。因此,只需确定每条对角线的起点,由起点向右上延伸直到边界,再根据当前所在的行数判断是否需要逆序即可。每行的起始点如下:从[0,0]向下延伸到[m-1,0],再向右延伸到[m-1][n-1] */
//算法实现:
class Solution {
public:
vector<int> findDiagonalOrder(vector<vector<int>>& matrix) {
vector<int> result;
int m = matrix.size();
if(m == 0)
return result;
int n = matrix[0].size();
if(n == 0)
return result;
for(int i = 0, j = 0; i+j < m+n-1; ) { // 起点位置(0,0)->(m-1,0)->(m-1,n-1),然后每个起点右上延伸直到边界,每隔一行翻转一下
vector<int> tmp;
bool bflag = (i+j) & 0x01;
if(i < m) {
for(int x = i, y = 0; x>=0 && y<n; x--,y++) {
tmp.push_back(matrix[x][y]);
}
i++;
}
else if(i >= m) {
for(int x = i-1, y = j+1; x>=0 && y<n; x--,y++) {
tmp.push_back(matrix[x][y]);
}
j++;
}
if(bflag) { // bflag需要判断i+j,但是由于上面i和j已经累加了,所以要用bflag判断
reverse(tmp.begin(), tmp.end());
}
result.insert(result.end(), tmp.begin(), tmp.end());
}
return result;
}
};

LeetCode498 对角线遍历的更多相关文章

  1. [Swift]LeetCode498. 对角线遍历 | Diagonal Traverse

    Given a matrix of M x N elements (M rows, N columns), return all elements of the matrix in diagonal ...

  2. [LeetCode] Diagonal Traverse 对角线遍历

    Given a matrix of M x N elements (M rows, N columns), return all elements of the matrix in diagonal ...

  3. LeetCode:对角线遍历【498】

    LeetCode:对角线遍历[498] 题目描述 给定一个含有 M x N 个元素的矩阵(M 行,N 列),请以对角线遍历的顺序返回这个矩阵中的所有元素,对角线遍历如下图所示. 示例: 输入: [ [ ...

  4. Leetcode 498.对角线遍历

    对角线遍历 给定一个含有 M x N 个元素的矩阵(M 行,N 列),请以对角线遍历的顺序返回这个矩阵中的所有元素,对角线遍历如下图所示. 示例: 输入: [ [ 1, 2, 3 ], [ 4, 5, ...

  5. Leetcode 498:对角线遍历Diagonal Traverse(python3、java)

    对角线遍历 给定一个含有 M x N 个元素的矩阵(M 行,N 列),请以对角线遍历的顺序返回这个矩阵中的所有元素,对角线遍历如下图所示. Given a matrix of M x N elemen ...

  6. 498. (leetcode)对角线遍历

    498. 对角线遍历 根据题目的图像看,主要有两种走法,第一种是向右上(顺时针方向),第二种是向左下(逆时针)走 我们设 x ,y初始为0,分别对应横纵坐标 现在分析右上(0,2) 为例:(注意右上的 ...

  7. Java实现 LeetCode 498 对角线遍历

    498. 对角线遍历 给定一个含有 M x N 个元素的矩阵(M 行,N 列),请以对角线遍历的顺序返回这个矩阵中的所有元素,对角线遍历如下图所示. 示例: 输入: [ [ 1, 2, 3 ], [ ...

  8. python(leetcode)498. 对角线遍历

    这题难度中等,记录下思路 第一个会超时, 第二个:思想是按斜对角线行进行右下左上交替遍历, def traverse(matrix): n=len(matrix)-1 m=len(matrix[0]) ...

  9. 498 Diagonal Traverse 对角线遍历

    详见:https://leetcode.com/problems/diagonal-traverse/description/ C++: class Solution { public: vector ...

随机推荐

  1. element ui的el-radio踩坑

    1.html 1 <div class="listPeopleDetail"> 2 <div class="item" v-for=" ...

  2. NOI Online 题解

    T1 对\(t_i = 1\)的边,将\(u_i, v_i\)连一条边权为\(1\)的边.否则连一条边权为\(0\)的边. 对于每一个连通块,若图中不存在一条边权之和为奇数的圈,则可以将这个连通块二染 ...

  3. 模块urllib requests json xml configparser 学习笔记

    发起http请求 获取返回值 返回值是字符串 第三方模块安装 pip install requests 返回值格式 xml  html  jaon json 功能  loads   字符串>&g ...

  4. sqli-labs 54-65(CHALLANGES)

    challenges less-54 less-55 less-56 less-57 less-58 less-59 less-60 less-61 less-62 less-63 less-64 l ...

  5. Springboot 项目 无法读取resources下的mapper文件夹的.xml文件

    之前学习的时候遇到的一个问题 org.springframework.beans.factory.BeanCreationException: Error creating bean with nam ...

  6. Java静态方法和非静态方法之间的关系

    非静态方法 public class Demo2 {    public static void main(String[] args) {        //实例化这个类 new       //对 ...

  7. 【Electron Playground】Electron 窗口问题汇总

    作者:Kurosaki 本节旨在汇总在开发Electron 窗口可能遇到的问题,做一个汇总,后续遇到问题会持续更新. 1. 窗口闪烁问题. const { BrowserWindow } = requ ...

  8. 使用caddy实现非标准端口https

    近来使用Halo搭建博客,并顺便把WeHalo小程序也把玩了起来,但是发现几个非常棘手的问题: 根据访问日志发现有三方在刷取关键接口的请求,http请求在部分情况下会暴露出很显著的安全问题: 小程序强 ...

  9. react第十八单元(redux中间件redux-thunk,redux工程目录的样板代码,规范目录结构)

    第十八单元(redux中间件redux-thunk,redux工程目录的样板代码,规范目录结构) #课程目标 中间件:中间件增强redux的可扩展性,实现功能复用的目的. redux-thunk异步逻 ...

  10. DRF终极封装ViewSet和Router附教程PDF源码

    在DRF官方教程的学习过程中,一个很明显的感受是框架在不断地进行封装,我们自己写框架/工具/脚本/平台也可以模仿模仿,先完成底层代码,再做多层封装,让使用者很容易就上手操作.本文是教程的最后一篇,介绍 ...