public int[] diagonalOrder (int[][] mat) {
        // write code here
        int i=0;
        int j=0;
        int n = mat.length;
        int m = mat[0].length;
        int[] res = new int[n * m];
        int index = 0;
        int[][] dirs = new int[][]{{-1,1},{1,-1}};
        while (index < res.length) {
            System.out.println("i:" + i + "j:" + j);
            res[index++] = mat[i][j];
            int[] dir = dirs[(i + j) % 2];
            if (i + dir[0] < n && i + dir[0] >= 0 && j + dir[1] < m && j + dir[1] >= 0) {
                // 沿着对角线遍历
                i = i + dir[0];
                j = j + dir[1];
            } else {
                // 对角线下标是不断累加的,0:(0,0);1:(0,1),(1,0);2:(2,0),(1,1),(0,2)
                int next = i + j + 1;
                if (next % 2 == 0) {
                    i = next >= n ? n-1 : next;
                    j = next - i;
                } else {
                    j = next >= m ? m-1 : next % m;
                    i = next - j;
                    
                }
            }
        }

        return res;
    }