题目:

给你一个大小为 m x n 的矩阵 mat ,请以对角线遍历的顺序,用一个数组返回这个矩阵中的所有元素。

输入:mat = [[1,2,3],[4,5,6],[7,8,9]]
输出:[1,2,4,7,5,3,6,8,9]
示例 2:

输入:mat = [[1,2],[3,4]]
输出:[1,2,3,4]

提示:

m == mat.length
n == mat[i].length
1 <= m, n <= 104
1 <= m * n <= 104
-105 <= mat[i][j] <= 105

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/diagonal-traverse
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

解题思路:

找遍历过程的规律:

1.每一趟遍历的元素坐标之和 x+y是一次递增的;

2.每一趟都是x和y其中一个元素从小到大,另一个元素从大到小;

  • 奇数趟:第三趟:(2,0),(1,1),(0,2),x从大到小,y从小到大;
  • 偶数趟:第四趟:(0,3),(1,2),(2,1),x从小到大,y从大到小;

3.确定初始值

  • 奇数趟:第五趟:(2,2),(1,3),x+y = 4,x从大到小(x 尽量取最大,当初始值超过 x 的上限时,不足的部分加到 y 上面)故x初始值取2,剩下的2,加到y上,y初始值为2;
  • 偶数趟:第四趟:(0,3),(1,2),(2,1),x+y = 3,x从小到大,初始值取0,y从大到小,初始值取3;

4.确定结束值

  • 奇数趟:第三趟:(2,0),(1,1),(0,2),x从大到小,y从小到大,结束的判断是, x 减到 0 或者 y 加到上限;
  • 偶数趟:第四趟:(0,3),(1,2),(2,1),x从小到大,y从大到小,虽然y才减到1,但是x已经加到上限了;

5.注意:奇数趟 x 从大到小,那么偶数趟 y 从大到小,循环进行。 并且方向相反时,逻辑处理是一样的,除了x,y和他们各自的上限值是相反的。

  • x 从大到小,第三趟:9 的坐标(2, 0),6 的坐标(1, 1),3 的坐标是(0,2)。x + y = 2,x 初始值取 2,y 取 0。结束值 x 减到 0 为止;
  • x 从小到大,第四趟:4 的坐标(0, 3),7 的坐标(1, 2),10 的坐标(2, 1)。x + y = 3,y 初始值取 3,x 取 0。结束值 y 减到 0 为止;

代码:

 1 class Solution {
2 public int[] findDiagonalOrder(int[][] mat) {
3 int m = mat.length;
4 int n = mat[0].length;
5 int[] res = new int[m*n];
6 int i = 0, k = 0;
7 while(i <= m+n-1){
8 //奇数趟:x从大到小,y从小到大
9 //定义初始值
10 int x1 = i < m ? i : m-1;
11 int y1 = i - x1;
12 while(x1 >= 0 && y1 <= n-1){
13 res[k] = mat[x1][y1];
14 k++;
15 x1--;
16 y1++;
17 }
18 i++;
19 //偶数趟:x从小到大,y从大到小
20 //定义初始值
21 int y2 = i < n ? i : n-1;
22 int x2 = i - y2;
23 while(x2 <= m-1 && y2 >=0) {
24 res[k] = mat[x2][y2];
25 k++;
26 x2++;
27 y2--;
28 }
29 i++;
30 }
31 return res;
32 }
33 }

力扣498(java)-对角线遍历(中等)的更多相关文章

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

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

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

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

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

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

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

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

  5. 力扣1689. 十-二进制数的最少数目-C语言实现-中等难度题

    题目 传送门 如果一个十进制数字不含任何前导零,且每一位上的数字不是 0 就是 1 ,那么该数字就是一个 十-二进制数 .例如,101 和 1100 都是 十-二进制数,而 112 和 3001 不是 ...

  6. 刷题-力扣-107. 二叉树的层序遍历 II

    107. 二叉树的层序遍历 II 题目链接 来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problems/binary-tree-level-order-tr ...

  7. 力扣算法经典第一题——两数之和(Java两种方式实现)

    一.题目 难度:简单 给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 target 的那 两个 整数, 并返回它们的数组下标. 你可以假设每种输入只会对应一 ...

  8. Leetcode 498.对角线遍历

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

  9. 力扣1438. 绝对差不超过限制的最长连续子数组-C语言实现-中等难度

    题目 传送门 文本 给你一个整数数组 nums ,和一个表示限制的整数 limit,请你返回最长连续子数组的长度,该子数组中的任意两个元素之间的绝对差必须小于或者等于 limit . 如果不存在满足条 ...

  10. 力扣1052. 爱生气的书店老板-C语言实现-中等难度

    题目 传送门 文本 今天,书店老板有一家店打算试营业 customers.length 分钟.每分钟都有一些顾客(customers[i])会进入书店,所有这些顾客都会在那一分钟结束后离开. 在某些时 ...

随机推荐

  1. 华为sound x智能音箱初体验

    外观颜值   在这个网红遍地的年代,好看的皮囊是那么的重要.很多东西,买与不买,只是你在电脑的橱上看它一眼.颜值对一个消费电子产品来说,在这个虚拟的互联网世界中是那么的重要.sound x的初次看来, ...

  2. json转化总结

    最近对接个老接口,返回的信息格式十分清奇,为此折腾了一会,简单记录下 先贴下这个接口返回的格式样子 在本地我使用idea的debug模式调试返回的信息,方式:进入debug模式,请求达到断点处,按组合 ...

  3. 从时间复杂度的角度出发,list和vector之间查找,插入,删除等数据操作的区别

    list和vector是STL(标准模板库)中常用的两种序列容器,它们各自在不同类型的操作上有着不同的优势.下面是list和vector在不同操作上的擅长之处: list的擅长操作 插入和删除操作:l ...

  4. 阿里二面:Java中锁的分类有哪些?你能说全吗?

    引言 在多线程并发编程场景中,锁作为一种至关重要的同步工具,承担着协调多个线程对共享资源访问秩序的任务.其核心作用在于确保在特定时间段内,仅有一个线程能够对资源进行访问或修改操作,从而有效地保护数据的 ...

  5. ElasticSearch中_source、store_fields、doc_values性能比较【转载】

    原文地址请点击 在这篇文章中,我想从性能的角度探讨ElasticSearch 为我们存储了哪些字段,以及在查询检索时这些字段如何工作.实际上,ElasticSearch和Solr的底层库Lucene提 ...

  6. js前端 md5加密

    1.在utils目录下新建md5.js 在这里,我把md5()这个方法使用export进行了导出,方便在其他地方使用es6 import 引入使用 /* * JavaScript MD5 1.0.1 ...

  7. nginx 自定义日志格式输出

    修改 nginx.conf 自定义日志格式.路径 log_format my_format '$remote_addr $msec $http_host $request_uri'; 使用精准配准,对 ...

  8. KingbaseES V8R6 集群运维案例-- sys_internal.init.*文件引起sys_basebackup失败

    案例说明: KingbaseES V8R6集群在执行'repmgr standby clone'或sys_basebackup克隆备库时出现如下图相关sys_internal.init文件错误: 适用 ...

  9. 在idea/webstorm等terminal运行命令报错:Command rejected by the operating system没有权限【已解决】

    在idea/webstorm等编译器terminal窗口运行命令报错:Command rejected by the operating system没有权限[已解决] 1.修改terminal窗口 ...

  10. wordpress自建博客站,在页脚添加网站总运行时间

    wordpress自建博客站,在页脚添加网站总运行时间 笔者使用的主题是 GeneratePress 版本:3.1.3 <span id="momk" style=" ...