当前位置:网站首页>LeetCode_模拟_中等_498.对角线遍历
LeetCode_模拟_中等_498.对角线遍历
2022-08-04 14:31:00 【小城老街】
1.题目
给你一个大小为 m x n 的矩阵 mat ,请以对角线遍历的顺序,用一个数组返回这个矩阵中的所有元素。
示例 1:
输入: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/problems/diagonal-traverse
2.思路
(1)模拟
① 首先,分析题目可知,在整个遍历过程中,只有两种遍历方向:右上方和左下方;
② 在朝右上方遍历时,如果遍历到边界(例如示例 1 中的元素 1 和 3):此时先判断当前元素的右侧相邻元素的位置是否越界,如果未越界,则遍历该元素,并且切换遍历方向;如果越界,则选择当前元素的下侧相邻元素,同时也要切换遍历方向。
③ 在朝左下方遍历时,其步骤与朝右上方遍历类似,此处不再赘述。
④ 需要注意的是,由于在遍历过程中遍历方向有所不同,所以我们可能通过 boolean 变量 flag 来表示遍历方向,例如 flag = true 表示方向为右上方。此外,该方法的时间复杂度为 O(m * n)。
3.代码实现(Java)
//思路1————模拟
class Solution {
public int[] findDiagonalOrder(int[][] mat) {
// m 行 n 列的矩阵
int m = mat.length;
int n = mat[0].length;
// res 保存最终的结果
int[] res = new int[m * n];
/* 遍历方向只有两种:右上方和左下方 刚开始的方向是右上方,将 flag 设置为 true 那么 flag = false 表示方向为左下方 */
boolean flag = true;
//从矩阵的左上角第一个元素开始遍历
int i = 0, j = 0;
//以对角线遍历方式开始遍历矩阵
for (int k = 0; k < m * n; k++) {
res[k] = mat[i][j];
//右上方
if (flag) {
//下一个元素的位置
int x = i - 1, y = j + 1;
//如果 x、y 超过了边界,则需要变换方向
if (x < 0 || y >= n) {
// (1) 下一个元素是右边相邻元素
x = i;
y = j + 1;
if (x < 0 || y >= n) {
// (2) 下一个元素是下边相邻元素
x = i + 1;
y = j;
}
//变换方向
flag = false;
}
// i、j 替代下一个元素的位置
i = x;
j = y;
} else {
//左下方,这里的处理与右上方类似
int x = i + 1, y = j - 1;
//判断边界
if (x >= m || y < 0) {
x = i + 1;
y = j;
if (x >= m || y < 0) {
x = i;
y = j + 1;
}
//变换方向
flag = true;
}
i = x;
j = y;
}
}
return res;
}
}
边栏推荐
- 爬虫——selenium基本使用、无界面浏览器、selenium的其他用法、selenium的cookie、爬虫案例
- CCF GLCC正式开营|九州云开源专家携丰厚奖金,助力高校开源推广
- 化繁为简,聊一聊复制状态机系统架构抽象
- ACL 2022 | 社会科学理论驱动的言论建模
- B.构造一个简单的数列(贪心)
- This week to discuss the user experience: Daedalus Nemo to join Ambire, explore the encryption of the ocean
- Makefile 语法及使用笔记
- NPDP|作为产品经理,如何快速提升自身业务素养?
- Crawler - basic use of selenium, no interface browser, other uses of selenium, cookies of selenium, crawler cases
- Crawler - action chain, xpath, coding platform use
猜你喜欢
Find My Technology | Prevent your pet from getting lost, Apple Find My technology can help you
【历史上的今天】8 月 4 日:第一位图灵奖女性得主;NVIDIA 收购 MediaQ;首届网络安全挑战大赛完成
【Web技术】1401- 图解 Canvas 入门
1401 - Web technology 】 【 introduction to graphical Canvas
爬虫——selenium基本使用、无界面浏览器、selenium的其他用法、selenium的cookie、爬虫案例
Centos7 install mysql version rapidly
蓝牙技术|上半年全国新增 130 万台充电桩,蓝牙充电桩将成为市场主流
本周讨论用户体验:Daedalus 的 Nemo 加入 Ambire,探索加密海洋
广告电商系统开发功能只订单处理
【剑指offer33】二叉搜索树的后序遍历序列
随机推荐
小 P 周刊 Vol.13
Crawler - action chain, xpath, coding platform use
特殊品种的二次开户验资金额
OAID是什么
C# 复制列表
leetcode:250. 统计同值子树
leetcode:212. 单词搜索 II
集合划分差最小问题(01背包)
1375. 二进制字符串前缀一致的次数-前序遍历法
开发者独立搭建一个跨模态搜索应用有多难?
FRED应用:毛细管电泳系统
Redis 复习计划 - Redis主从数据一致性和哨兵机制
用于X射线聚焦的复合折射透镜
一看就会的Chromedriver(谷歌浏览器驱动)安装教程
SQL语句的写法:Update、Case、 Select 一起的用法
[Problem solving] QT update component appears "To continue this operation, at least one valid and enabled repository is required"
自监督学习未来是掩码自编码器?KAIST最新《自监督学习掩码自编码器》研究进展
《中国综合算力指数》《中国算力白皮书》《中国存力白皮书》《中国运力白皮书》在首届算力大会上重磅发出
RS|哨兵二号(.SAFE格式)转tif格式
Centos7 install mysql version rapidly