498. 对角线遍历(LeetCode 华为专题)

Posted 我要出家当道士

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了498. 对角线遍历(LeetCode 华为专题)相关的知识,希望对你有一定的参考价值。

目录

1、Question

2、Analysis

3、Code

4、Execution


 1、Question

给你一个大小为 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

2、Analysis

       模拟,注意搜寻的方向和到达边界后指针的变化。我得吐槽一下,LeetCode代码模板参数不明的现象。

3、Code

int* findDiagonalOrder(int** mat, int matSize, int* matColSize, int* returnSize){
    int arraySize = matSize * (*matColSize), index = 0, i = 0, j = 0, flag = 1;
    int *array = (int *)malloc(sizeof(int) * arraySize);
    while(index < arraySize){
        array[index] = mat[i][j];
        if (flag){
            if (j + 1 >= *matColSize){
                i++;
                flag = 0;
            }
            else if (i - 1 < 0){
                j++;
                flag = 0;
            }
            else{
                i--;
                j++;
            }
        }else{
            if (i + 1 >= matSize){
                j++;
                flag = 1;
            }
            else if (j - 1 < 0){
                i++;
                flag = 1;
            }
            else{
                i++;
                j--;
            }
        }
        index++;
    }
    *returnSize = arraySize;
    return array;
}

4、Execution

以上是关于498. 对角线遍历(LeetCode 华为专题)的主要内容,如果未能解决你的问题,请参考以下文章

LEETCODE 498. 对角线遍历

LeetCode 498. 对角线遍历c++/java详细题解

498#对角线遍历

Leetcode 498. Diagonal Traverse

LeetCode - 操作次数不重复数字对角线遍历约瑟夫环

LeetCode4.Array and String — Diagonal Traverse 对角线遍历