力扣498(java)-对角线遍历(中等)
题目:
给你一个大小为 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)-对角线遍历(中等)的更多相关文章
- Leetcode 498:对角线遍历Diagonal Traverse(python3、java)
对角线遍历 给定一个含有 M x N 个元素的矩阵(M 行,N 列),请以对角线遍历的顺序返回这个矩阵中的所有元素,对角线遍历如下图所示. Given a matrix of M x N elemen ...
- 498. (leetcode)对角线遍历
498. 对角线遍历 根据题目的图像看,主要有两种走法,第一种是向右上(顺时针方向),第二种是向左下(逆时针)走 我们设 x ,y初始为0,分别对应横纵坐标 现在分析右上(0,2) 为例:(注意右上的 ...
- Java实现 LeetCode 498 对角线遍历
498. 对角线遍历 给定一个含有 M x N 个元素的矩阵(M 行,N 列),请以对角线遍历的顺序返回这个矩阵中的所有元素,对角线遍历如下图所示. 示例: 输入: [ [ 1, 2, 3 ], [ ...
- LeetCode:对角线遍历【498】
LeetCode:对角线遍历[498] 题目描述 给定一个含有 M x N 个元素的矩阵(M 行,N 列),请以对角线遍历的顺序返回这个矩阵中的所有元素,对角线遍历如下图所示. 示例: 输入: [ [ ...
- 力扣1689. 十-二进制数的最少数目-C语言实现-中等难度题
题目 传送门 如果一个十进制数字不含任何前导零,且每一位上的数字不是 0 就是 1 ,那么该数字就是一个 十-二进制数 .例如,101 和 1100 都是 十-二进制数,而 112 和 3001 不是 ...
- 刷题-力扣-107. 二叉树的层序遍历 II
107. 二叉树的层序遍历 II 题目链接 来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problems/binary-tree-level-order-tr ...
- 力扣算法经典第一题——两数之和(Java两种方式实现)
一.题目 难度:简单 给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 target 的那 两个 整数, 并返回它们的数组下标. 你可以假设每种输入只会对应一 ...
- Leetcode 498.对角线遍历
对角线遍历 给定一个含有 M x N 个元素的矩阵(M 行,N 列),请以对角线遍历的顺序返回这个矩阵中的所有元素,对角线遍历如下图所示. 示例: 输入: [ [ 1, 2, 3 ], [ 4, 5, ...
- 力扣1438. 绝对差不超过限制的最长连续子数组-C语言实现-中等难度
题目 传送门 文本 给你一个整数数组 nums ,和一个表示限制的整数 limit,请你返回最长连续子数组的长度,该子数组中的任意两个元素之间的绝对差必须小于或者等于 limit . 如果不存在满足条 ...
- 力扣1052. 爱生气的书店老板-C语言实现-中等难度
题目 传送门 文本 今天,书店老板有一家店打算试营业 customers.length 分钟.每分钟都有一些顾客(customers[i])会进入书店,所有这些顾客都会在那一分钟结束后离开. 在某些时 ...
随机推荐
- 华为sound x智能音箱初体验
外观颜值 在这个网红遍地的年代,好看的皮囊是那么的重要.很多东西,买与不买,只是你在电脑的橱上看它一眼.颜值对一个消费电子产品来说,在这个虚拟的互联网世界中是那么的重要.sound x的初次看来, ...
- json转化总结
最近对接个老接口,返回的信息格式十分清奇,为此折腾了一会,简单记录下 先贴下这个接口返回的格式样子 在本地我使用idea的debug模式调试返回的信息,方式:进入debug模式,请求达到断点处,按组合 ...
- 从时间复杂度的角度出发,list和vector之间查找,插入,删除等数据操作的区别
list和vector是STL(标准模板库)中常用的两种序列容器,它们各自在不同类型的操作上有着不同的优势.下面是list和vector在不同操作上的擅长之处: list的擅长操作 插入和删除操作:l ...
- 阿里二面:Java中锁的分类有哪些?你能说全吗?
引言 在多线程并发编程场景中,锁作为一种至关重要的同步工具,承担着协调多个线程对共享资源访问秩序的任务.其核心作用在于确保在特定时间段内,仅有一个线程能够对资源进行访问或修改操作,从而有效地保护数据的 ...
- ElasticSearch中_source、store_fields、doc_values性能比较【转载】
原文地址请点击 在这篇文章中,我想从性能的角度探讨ElasticSearch 为我们存储了哪些字段,以及在查询检索时这些字段如何工作.实际上,ElasticSearch和Solr的底层库Lucene提 ...
- js前端 md5加密
1.在utils目录下新建md5.js 在这里,我把md5()这个方法使用export进行了导出,方便在其他地方使用es6 import 引入使用 /* * JavaScript MD5 1.0.1 ...
- nginx 自定义日志格式输出
修改 nginx.conf 自定义日志格式.路径 log_format my_format '$remote_addr $msec $http_host $request_uri'; 使用精准配准,对 ...
- KingbaseES V8R6 集群运维案例-- sys_internal.init.*文件引起sys_basebackup失败
案例说明: KingbaseES V8R6集群在执行'repmgr standby clone'或sys_basebackup克隆备库时出现如下图相关sys_internal.init文件错误: 适用 ...
- 在idea/webstorm等terminal运行命令报错:Command rejected by the operating system没有权限【已解决】
在idea/webstorm等编译器terminal窗口运行命令报错:Command rejected by the operating system没有权限[已解决] 1.修改terminal窗口 ...
- wordpress自建博客站,在页脚添加网站总运行时间
wordpress自建博客站,在页脚添加网站总运行时间 笔者使用的主题是 GeneratePress 版本:3.1.3 <span id="momk" style=" ...