[数组基础] 0498. 对角线遍历

news/2024/11/2 9:38:13/

文章目录

      • 1. 题目链接
      • 2. 题目大意
      • 3. 示例
      • 4. 解题思路
      • 5. 参考代码

1. 题目链接

498. 对角线遍历 - 力扣(LeetCode)



2. 题目大意

描述:给定一个大小为 m×n 的矩阵 mat 。

要求:以对角线遍历的顺序,用一个数组返回这个矩阵中的所有元素。

说明:

  • m==mat.length。
  • n==mat[i].length。
  • 1≤m,n≤104。
  • 1≤m×n≤104。
  • −105≤mat[i][j]≤105。

3. 示例

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

4. 解题思路

找规律:

  1. 「行号 + 列号」为偶数时,方向为从左下到右上。记右上方向 (−1,+1),即行号减 1,列号加 1。
  2. 「行号 + 列号」为奇数时,方向为从右上到左下。记左下方向 (+1,−1),即行号加 1,列号减 1。

边界情况:

  1. 向右上方向移动时:
    1. 如果在最后一列,则向下方移动,即 **x += 1**
    2. 如果在第一行,则向右方移动,即 **y += 1**
    3. 其余情况想右上方向移动,即 **x -= 1****y += 1**
  2. 向左下方向移动时:
    1. 如果在最后一行,则向右方移动,即 **y += 1**
    2. 如果在第一列,则向下方移动,即 **x += 1**
    3. 其余情况向左下方向移动,即 **x += 1****y -= 1**

5. 参考代码

class Solution {public int[] findDiagonalOrder(int[][] mat) {int rows = mat.length;int cols = mat[0].length;int count = rows * cols;int x = 0, y = 0;int[] ans = new int[rows*cols];for (int i = 0; i < count; i++) {ans[i] = mat[x][y];if ((x + y) % 2 == 0) {// 最后一列if (y == cols - 1) {x++;// 第一行} else if (x == 0) {y++;// 右上方向} else {x--;y++;}} else {// 最后一行if (x == rows - 1) {y++;// 第一列} else if (y == 0) {x++;// 左下方向} else {x++;y--;}}}return ans;}}

http://www.ppmy.cn/news/1543831.html

相关文章

QT pro项目工程的条件编译

QT pro项目工程的条件编译 前言 项目场景&#xff1a;项目中用到同一型号两个相机&#xff0c;同时导入两个版本有冲突&#xff0c;编译不通过&#xff0c; 故从编译就区分相机导入调用&#xff0c;使用宏区分 一、定义宏 在pro文件中定义宏&#xff1a; DEFINES USE_Cam…

【代码随想录Day53】图论Part05

并查集理论基础 题目链接/文章讲解&#xff1a;并查集理论基础 | 代码随想录 寻找存在的路径 题目链接/文章讲解&#xff1a;代码随想录 import java.util.*;public class Main {public static void main(String[] args) {int numberOfElements, numberOfConnections;Scann…

一些MATLAB到Python的转换指南

1. 矩阵和数组操作 MATLAB使用方括号[]来创建矩阵和数组。Python使用列表[]或NumPy库中的数组。 MATLAB: A [1 2 3; 4 5 6; 7 8 9];Python: import numpy as npA np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])2. 数学运算 MATLAB中很多内置函数可以直接用于矩阵。Python…

T级别DDoS攻击与大型DDoS防御

在数字化高速发展的今天&#xff0c;网络攻击和安全防御的博弈愈加复杂&#xff0c;分布式拒绝服务&#xff08;DDoS&#xff09;攻击已然成为网络安全领域的一大难题。尤其是达到T级别的DDoS攻击&#xff0c;以每秒TB级别&#xff08;Tbps&#xff09;的超高流量给网络系统带来…

使用Navicat连接远程服务器中在docker中运行的MySQL数据库保姆级教程

使用Navicat连接远程服务器中在docker中运行的MySQL数据库保姆级教程 一、需要的资源 Navicat客户端&#xff08;我使用的是17.0.8版本&#xff0c;安装教程B站搜一个&#xff0c;很快能解决&#xff09;服务器&#xff08;已安装docker并运行了MySQL&#xff09; 二、步骤 …

uniapp使用echart

一 直线图 三中国地图 <template><view class"content"><l-echart ref"chartRef"></l-echart></view> </template><script setup> import { ref, onMounted } from "vue"; import geoJson from &quo…

clickhouse运维篇(二):多机器手动部署ck集群

熟悉流程并且有真正部署需求可以看一下我的另一篇简化部署的文章&#xff0c;因为多节点配置还是比较麻烦的先要jdk、zookeeper&#xff0c;再ck&#xff0c;还有各种配置文件登录不同机器上手动改配置文件还挺容易出错的。 clickhouse运维篇&#xff08;三&#xff09;&#x…

PCB电源层布线信号

在印刷电路板(PCB)的设计过程中,电源层通常被视为电源分配网络(PDN)的核心。电源层和接地层通常是通过平面铜层来实现的,旨在确保系统稳定性。然而,随着电路板复杂性的增加,尤其是在多层电路板中,设计师可能面临在电源层上布置信号线路的需求。虽然这种做法可以节省空…