美文网首页快乐写代码
T498、对角线遍历

T498、对角线遍历

作者: 上行彩虹人 | 来源:发表于2020-05-14 20:02 被阅读0次

给定一个含有 M x N 个元素的矩阵(M 行,N 列),请以对角线遍历的顺序返回这个矩阵中的所有元素,对角线遍历如下图所示。
示例:
输入:
[
[ 1, 2, 3 ],
[ 4, 5, 6 ],
[ 7, 8, 9 ]
]

输出: [1,2,4,7,5,3,6,8,9]
解释:
说明:
给定矩阵中的元素总数不会超过 100000。

使用一个方向up表示当前是向上还是向下遍历,需要考虑边界方向转换时的特殊情况。优先判断矩阵右下角时的转向下标变化。

 public int[] findDiagonalOrder(int[][] matrix) {
        if(matrix==null||matrix.length==0||matrix[0].length==0)
            return new int[0];
        int up = 1;
        int x = matrix.length, y = matrix[0].length;
        int len = x * y, idx = 0;
        int i = 0,j = 0;
        int []res = new int[len]; 
        while(idx<len){
            res[idx] = matrix[i][j];
            idx++;
            if(up==1){//向上
                if(i==0||(j+1)==y)
                    up = -up;
                if((j+1)==y) // 到右边界
                    i++;
                else if(i==0) // 到上边界
                    j++;
                else{
                    i--;j++;
                }
            }else if(up==-1){ // 向下
                if(j==0||(i+1)==x)
                    up = -up;
                if((i+1)==x) // 到下边界
                    j++;
                else if(j==0) // 到左边界
                    i++;
                else{
                    i++;j--;
                }
            }
        }
        return res;
    }

相关文章

网友评论

    本文标题:T498、对角线遍历

    本文链接:https://www.haomeiwen.com/subject/flmxohtx.html