498. 对角线遍历

498. 对角线遍历498. 对角线遍历https://leetcode.cn/problems/diagonal-traverse/

难度中等338收藏分享切换为英文接收动态反馈

给你一个大小为 m x n 的矩阵 mat ,请以对角线遍历的顺序,用一个数组返回这个矩阵中的所有元素。

示例 1:

498. 对角线遍历

输入: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;
    }
}

498. 对角线遍历

© 版权声明
THE END
喜欢就支持一下吧
点赞7 分享
相关推荐
  • 暂无相关文章
  • 评论 抢沙发

    请登录后发表评论

      暂无评论内容