当前位置:网站首页>LeetCode:498. 对角线遍历

LeetCode:498. 对角线遍历

2022-07-06 08:44:00 Bertil

给你一个大小为 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 <= 10^4
  • 1 <= m * n <= 10^4
  • -10^5 <= mat[i][j] <= 10^5

解题思路

1.首先遍历矩阵,然后新建一个map来存储key和value,key为横纵坐标之和,value为key相等的元素数组(即每条对角线的元素组成的数组)
2.然后新建一个结果数组res,遍历map,将对角线是偶数(即第2条对角线、第4条对角线…,满足key % 2 === 1)的元素正序放入res中,将对角线是奇数(即第1条对角线、第3条对角线…,满足key % 2 === 0)的元素倒序放入res中,最后返回res即可

代码

/** * @param {number[][]} mat * @return {number[]} */
var findDiagonalOrder = function(mat) {
    
    const row = mat.length
    const col = mat[0].length
    const record = new Map()
    for (let i = 0; i < row; i++) {
    
        for (let j = 0; j < col; j++) {
    
            const key = i + j
            if (!record.has(key)) record.set(key, [])
                record.get(key).push(mat[i][j])
            }
        }
    const res = []
    for (const [key, nums] of record.entries()) {
    // entries()获取所有的键值对数组:[[key1, value1], [key2, value2]]
        key % 2 === 1 ? res.push(...nums) : res.push(...nums.reverse())
    }
    return res
};
原网站

版权声明
本文为[Bertil]所创,转载请带上原文链接,感谢
https://blog.csdn.net/Bertil/article/details/125001439