498. 对角线遍历(LeetCode 华为专题)
Posted 我要出家当道士
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了498. 对角线遍历(LeetCode 华为专题)相关的知识,希望对你有一定的参考价值。
目录
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. 对角线遍历c++/java详细题解