498. 对角线遍历

498. 对角线遍历

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

示例:

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

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

解释:

说明:

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

解题思路

对于如下矩阵,我们以矩阵上边界和右边界的点作为起点开始遍历,我们统一以左下方为方向进行遍历

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

但是题目中显然是存在左下方遍历和右上方遍历交替进行的,但是问题在于他们的起点难以确定,所以我们统一以左下方为基准,后面再对元素进行翻转
在这里插入图片描述

代码

class Solution {public int[] findDiagonalOrder(int[][] mat) {int n=mat.length,m=mat[0].length;int[] res = new int[n * m];int p=0;boolean pos=false;for (int i=0;i<m;i++){int x=0,y=i,l=p;while (x>=0&&x<n&&y>=0&&y<m){ res[p++]=mat[x][y];x++;y--;}       int r=p-1;if(!pos){while (l<r){int t=res[l];res[l]=res[r];res[r]=t;l++;r--;}}pos=!pos;}for (int i=1;i<n;i++){int x=i,y=m-1,l=p;while (x>=0&&x<n&&y>=0&&y<m){res[p++]=mat[x][y];x++;y--;}int r=p-1;if(!pos){while (l<r){int t=res[l];res[l]=res[r];res[r]=t;l++;r--;}}pos=!pos;}return res;}
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/390248.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

软件测试测试用例编写_不要先编写所有软件测试-只需编写一个

软件测试测试用例编写Test Driven Development (TDD) is sometimes described as “writing tests first”. The TDD mantra states that we should not write code before we have written automated tests that exercise that code. Writing code first is considered subopt…

练习五

1.团队模式和团队的开发模式有什么关系&#xff1f; 答&#xff1a; 首先我来解释一下这两个名词&#xff1a; 我查资料了解了一下&#xff0c;团队模式&#xff0c;更偏向于多人合作的那种&#xff0c;而且我理解的“团队”会是一种多人合作的情况下&#xff0c;长期磨合后的一…

Squid 访问控制配置

Squid 访问控制配置 主配置文件内加入限制参数 vim /etc/squid/squid.conf # 访问控制 acl http proto HTTP # 限制访问 good_domain添加两个域名“.”表示半解析(相当于*) acl good_domain dstdomain .kevin.net .baidu.com # 允许good_domain内的域名访问 http_access allow …

剑指 Offer 62. 圆圈中最后剩下的数字

0,1,,n-1这n个数字排成一个圆圈&#xff0c;从数字0开始&#xff0c;每次从这个圆圈里删除第m个数字&#xff08;删除后从下一个数字开始计数&#xff09;。求出这个圆圈里剩下的最后一个数字。 例如&#xff0c;0、1、2、3、4这5个数字组成一个圆圈&#xff0c;从数字0开始每…

rust 编程入门_面向初学者的Rust –最受欢迎的编程语言入门

rust 编程入门Rust has been voted Stack Overflow’s most loved programming language for five years in a row. This article will tell you why Rust is awesome.Rust已连续五年被评为Stack Overflow最受欢迎的编程语言。 本文将告诉您为什么Rust很棒。 Rust is a system…

【转载】springboot:如何优雅的使用mybatis

这两天启动了一个新项目因为项目组成员一直都使用的是mybatis&#xff0c;虽然个人比较喜欢jpa这种极简的模式&#xff0c;但是为了项目保持统一性技术选型还是定了 mybatis。到网上找了一下关于spring boot和mybatis组合的相关资料&#xff0c;各种各样的形式都有&#xff0c;…

创建react应用程序_通过构建电影搜索应用程序在1小时内了解React

创建react应用程序If youve been meaning to learn React but are unsure of where to start, Scrimbas brand new Build a Movie Search App course is perfect for you! 如果您一直想学习React&#xff0c;但是不确定从哪里开始&#xff0c;那么Scrimba全新的Build a Movie S…

GeoServer自动发布地图服务

1 NetCDF气象文件自动发布案例 GeoServer是一个地理服务器&#xff0c;提供了管理页面进行服务发布&#xff0c;样式&#xff0c;切片&#xff0c;图层预览等一系列操作&#xff0c;但是手动进行页面配置有时并不满足业务需求&#xff0c;所以GeoServer同时提供了丰富的rest接口…

selenium+ python自动化--断言assertpy

前言&#xff1a; 在对登录验证时&#xff0c;不知道为何原因用unittest的断言不成功&#xff0c;就在网上发现这个assertpy&#xff0c;因此做个笔记 准备&#xff1a; pip install assertypy 例子&#xff1a; 1 from assertpy import assert_that2 3 4 def check_login():5 …

11. 盛最多水的容器

11. 盛最多水的容器 给你 n 个非负整数 a1&#xff0c;a2&#xff0c;…&#xff0c;an&#xff0c;每个数代表坐标中的一个点 (i, ai) 。在坐标内画 n 条垂直线&#xff0c;垂直线 i 的两个端点分别为 (i, ai) 和 (i, 0) 。找出其中的两条线&#xff0c;使得它们与 x 轴共同构…

深入理解ES6 pdf

下载地址&#xff1a;网盘下载目录 第1章 块级作用域绑定 1var声明及变量提升&#xff08;Hoisting&#xff09;机制 1块级声明 3-- let声明 3-- 禁止重声明 4-- const声明 4-- 临时死区&#xff08;Temporal Dead Zone&#xff09; 6循环中的块作用域绑定 7-- 循环中的函…

MyBatis之输入与输出(resultType、resultMap)映射

2019独角兽企业重金招聘Python工程师标准>>> 在MyBatis中&#xff0c;我们通过parameterType完成输入映射(指将值映射到sql语句的占位符中&#xff0c;值的类型与dao层响应方法的参数类型一致)&#xff0c;通过resultType完成输出映射(从数据库中输出&#xff0c;通…

2021-08-25556. 下一个更大元素 III

556. 下一个更大元素 III 给你一个正整数 n &#xff0c;请你找出符合条件的最小整数&#xff0c;其由重新排列 n 中存在的每位数字组成&#xff0c;并且其值大于 n 。如果不存在这样的正整数&#xff0c;则返回 -1 。 注意 &#xff0c;返回的整数应当是一个 32 位整数 &…

gradle tool升级到3.0注意事项

Gradle版本升级 其实当AS升级到3.0之后&#xff0c;Gradle Plugin和Gradle不升级也是可以继续使用的&#xff0c;但很多新的特性如&#xff1a;Java8支持、新的依赖匹配机制、AAPT2等新功能都无法正常使用。 Gradle Plugin升级到3.0.0及以上&#xff0c;修改project/build.grad…

如何使用React,TypeScript和React测试库创建出色的用户体验

Im always willing to learn, no matter how much I know. As a software engineer, my thirst for knowledge has increased a lot. I know that I have a lot of things to learn daily.无论我知道多少&#xff0c;我总是愿意学习。 作为软件工程师&#xff0c;我对知识的渴望…

PowerDesigner常用设置

2019独角兽企业重金招聘Python工程师标准>>> 使用powerdesigner进行数据库设计确实方便&#xff0c;以下是一些常用的设置 附加&#xff1a;工具栏不见了 调色板(Palette)快捷工具栏不见了 PowerDesigner 快捷工具栏 palette 不见了&#xff0c;怎么重新打开&#x…

bzoj5090[lydsy11月赛]组题

裸的01分数规划,二分答案,没了. #include<cstdio> #include<algorithm> using namespace std; const int maxn100005; int a[maxn]; double b[maxn]; double c[maxn]; typedef long long ll; ll gcd(ll a,ll b){return (b0)?a:gcd(b,a%b); } int main(){int n,k;s…

797. 所有可能的路径

797. 所有可能的路径 给你一个有 n 个节点的 有向无环图&#xff08;DAG&#xff09;&#xff0c;请你找出所有从节点 0 到节点 n-1 的路径并输出&#xff08;不要求按特定顺序&#xff09; 二维数组的第 i 个数组中的单元都表示有向图中 i 号节点所能到达的下一些节点&#…

深入框架本源系列 —— Virtual Dom

该系列会逐步更新&#xff0c;完整的讲解目前主流框架中底层相通的技术&#xff0c;接下来的代码内容都会更新在 这里 为什么需要 Virtual Dom 众所周知&#xff0c;操作 DOM 是很耗费性能的一件事情&#xff0c;既然如此&#xff0c;我们可以考虑通过 JS 对象来模拟 DOM 对象&…

网络工程师常备工具_网络安全工程师应该知道的10种工具

网络工程师常备工具If youre a penetration tester, there are numerous tools you can use to help you accomplish your goals. 如果您是渗透测试人员&#xff0c;则可以使用许多工具来帮助您实现目标。 From scanning to post-exploitation, here are ten tools you must k…