498. 对角线遍历https://leetcode.cn/problems/diagonal-traverse/
难度中等338收藏分享切换为英文接收动态反馈
给你一个大小为 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 <= 104
1 <= m * n <= 104
-105 <= mat[i][j] <= 105
通过次数74,359提交次数139,908
class Solution {
public int[] findDiagonalOrder(int[][] mat) {
int n = mat.length;
int m = mat[0].length;
int[] ans = new int[n*m];
int i=0;
int j=0;
int z = 0;
while(z<(n*m))
{
while(i>=0 && i<n && j>=0 && j<m) //基数往上 i-1 j-1
{
ans[z++]=mat[i][j];
i--;
j++;
}
//斜着向上的方向 i-1,j-1 遇到边界,先向右,再向下
if((i+1)<n && j<m)
{
i = i+1;
j = j;
}
else
{
i = i+2;
j = j-1;
}
while(i>=0 && i<n && j>=0 && j<m) //偶数往下
{
ans[z++]=mat[i][j];
i++;
j--;
}
//斜着向下的方向 i+1,j+1 遇到边界,先向下,再向右
if(i<n && (j+1)<m) {
i = i;
j = j+1;
}
else
{
i = i-1;
j = j+2;
}
}
return ans;
}
}
© 版权声明
文章版权归作者所有,未经允许请勿转载。
THE END
喜欢就支持一下吧
相关推荐
暂无评论内容