给你一个大小为 m x n
的矩阵 mat
,请以对角线遍历的顺序,用一个数组返回这个矩阵中的所有元素。
示例 1:
来源:力扣(LeetCode)
模拟
我们发现, 当下标和为偶数时, 向右上; 奇数时, 向左下
/**
* Note: The returned array must be malloced, assume caller calls free().
*/
int
* findDiagonalOrder(int** mat, int matSize, int* matColSize, int* returnSize)
{
if (matSize == 0)
{
*returnSize = 0;
return 0;
}
int matRow = matSize;
int matColumn = matColSize[0];
*returnSize = matColumn * matRow;
int *ans = (int *)malloc (sizeof (int) * (matColumn * matRow));
int i = 0, j = 0;
for (int k = 0; k < matColumn * matRow; k ++)
{
ans[k] = mat[i][j];
if ((i + j) % 2 == 0)
{
// 考虑边界情况
if (j < matColumn - 1)
{
j ++;
if (i > 0)
{
i --;
}
}
else
{
i ++;
}
}
else
{
if (i < matRow - 1)
{
i ++;
if (j > 0)
{
j --;
}
}
else
{
j ++;
}
}
}
return ans;
}