美文网首页快乐写代码
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