给定一个含有 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. Kubernetes Python Client 初体验之安装授权

    最近想做一个基于flask的云平台管理服务器,利用python调用kubenetes提供的API来实现云平台的操作.笔者使用的是Windows,kubernetes集群安装在Ubuntu和Respbi ...

  2. SpringBoot使用Mybatis-plus及分页功能的细节部分

    pom.xml <?xml version="1.0" encoding="UTF-8"?> <project xmlns="htt ...

  3. Web常用编码以及攻击绕过笔记

    一.URL编码形式:"%"加上ASCII码(先将字符转换为两位ASCII码,再转为16进制),其中加号"+"在URL编码中和"%20"表示一 ...

  4. Sqlmap 学习笔记1:sqlmap参数

    SQLMP参数分析 1 目录 1.Target Options 2.Requests Options 3.Injection Options 4.Detection Options 5.Techniq ...

  5. 2020年度综合大盘点:火爆IT业的7大Java技术,每一项都是大写的“牛逼”!

    关注"Java这点事",每天与你分享Java技术.IT资讯 JAVA语言作为历史最为悠久的编程语言,从95年5月开始历经数十年依然盘踞在编程榜前三的位置,与它强大的功能和广泛的运用 ...

  6. QEMU/KVM网络模式(二)——NAT

    在QEMU/KVM中,默认使用IP伪装的方式去实现NAT,而不是用SNAT或DNAT的方式. 1.安装软件包 # yum -y install bridge-utils iptables dnsmas ...

  7. 前方高能!看Python程序员是表白的

    一.️爱心墙️ 通过爬虫搜集到粉丝的头像,然后利用PIL库拼接出爱心墙的形状: 二.代码分析 1.头像爬取 在个人中心点击我的粉丝便可以看到自己的粉丝,通过抓包可知对应的接口为: url = 'htt ...

  8. PHP连接数据库的方式

    1,旧的方式 - mysql(面向过程) 1 <?php 2 //定义连接参数 3 $host = 'localhost'; 4 $user = 'root'; 5 $password = '' ...

  9. webform中配置服务器控件的样式

    前台 Style <asp:Label ID="Label1" runat="server" Text="Label" Style=& ...

  10. 简单了解一下 Nginx

    一.Nginx 基本认识 1.Nginx 是什么? Nginx 是一款开源的.轻量级的.高性能的 HTTP 服务器 以及 反向代理服务器. 特点是 占有内存少.并发能力强. 2.Nginx 用来干什么 ...