【leetcode498】对角线遍历java题解

【leetcode分类下所有的题解均为作者本人经过权衡后挑选出的题解,在易读和可维护性上有优势
每题只有一个答案,避免掉了太繁琐的以及不实用的方案,所以不一定是最优解】

给定一个含有 M x N 个元素的矩阵(M 行,N 列),请以对角线遍历的顺序返回这个矩阵中的所有元素,对角线遍历如下图所示。
示例:

输入:
[
[ 1, 2, 3 ],
[ 4, 5, 6 ],
[ 7, 8, 9 ]
]

输出: [1,2,4,7,5,3,6,8,9]

说明:

给定矩阵中的元素总数不会超过 100000 。

class Solution {
    public int[] findDiagonalOrder(int[][] matrix) {
        if(matrix.length == 0 || matrix == null) return new int[0];
        
        int m = matrix.length, n = matrix[0].length;
        int[] res = new int[m * n];
        
        int row = 0, col = 0, d = 0;
        int[][] dirs = {{-1,1},{1,-1}};
        
        for(int i = 0; i < m * n; i++)
        {
            res[i] = matrix[row][col];
            row += dirs[d][0];
            col += dirs[d][1];
            
            if(row >= m) { row = m - 1; col += 2; d = 1 - d;}
            if(col >= n) { col = n - 1; row += 2; d = 1 - d;}
            if(row < 0)  { row = 0; d = 1 - d;}
            if(col < 0)  { col = 0; d = 1 - d;}
        }
        return res;
    }
}

思路:

  • 定义方向变量的二维数组dirs进行转换方向
  • 转换方向的类型分为两种

猜你喜欢

转载自blog.csdn.net/weixin_43046082/article/details/88992950