题意:
        给定一个大小为 n*m 的矩阵,请以对角线遍历并返回遍历结果。

方法一:
模拟

思路:
        模拟。
        规律如下:
                1、n行m列的矩阵对角线遍历的行数为(n+m-1)行;
                2、每一行的元素:行下标+列下标=行号,即(i+j==行号);
                3、前n行的列下标都是从 j=0 开始,后面行的列下标开始符号分别是 j=1, j=2, j=3.......连续递增。
                
                可以每次都斜向上遍历每行的元素,然后再把奇数行的元素翻转即可(行下标从0开始)。



class Solution {
public:
    
    vector<int> diagonalOrder(vector<vector<int>>& mat) {
        vector<int> res;
        vector<int> t;//临时数组
        if(mat.size()==0)
            return res;
        int n=mat.size(),m=mat[0].size();
        
        int flag=1;//-1表示斜向上,1表示斜向下
        int i=0;
        for(;i<n;i++){//遍历前n行
            flag=-flag;
            for(int j=0;j<m&&j<=i;j++){//遍历行中元素
                t.push_back(mat[i-j][j]);
            }
            if(flag==1)
                reverse(t.begin(),t.end());
            for(int j=0;j<t.size();j++)
                res.push_back(t[j]);
            t.clear();
        }
        int tmp=0;
        for(;i<n+m-1;i++){//遍历后面的行
            flag=-flag;
            for(int j=++tmp;j<tmp+n&&j<m;j++){//遍历行中元素
                t.push_back(mat[i-j][j]);
            }
            if(flag==1)
                reverse(t.begin(),t.end());
            for(int j=0;j<t.size();j++)
                res.push_back(t[j]);
            t.clear();
        }
        return res;
    }
};

时间复杂度:
空间复杂度:

方法二:
java

思路:
        思路与方法一相同,模拟实现。

import java.util.*;


public class Solution {
    
    public int[] diagonalOrder (int[][] mat) {
        
        if(mat.length==0)
            return new int[0];
        int n=mat.length,m=mat[0].length;
        int[] res=new int[n*m];
        Vector<Integer> t=new Vector<>();//临时数组
        int k=0;
        
        int flag=1;//-1表示斜向上,1表示斜向下
        int i=0;
        for(;i<n;i++){//遍历前n行
            flag=-flag;
            for(int j=0;j<m&&j<=i;j++){//遍历行中元素
                t.add(mat[i-j][j]);
            }
            if(flag==1)
                Collections.reverse(t);
            for(int j=0;j<t.size();j++)
                res[k++]=t.get(j);
            t.clear();
        }
        int tmp=0;
        for(;i<n+m-1;i++){//遍历后面的行
            flag=-flag;
            for(int j=++tmp;j<tmp+n&&j<m;j++){//遍历行中元素
                t.add(mat[i-j][j]);
            }
            if(flag==1)
                Collections.reverse(t);
            for(int j=0;j<t.size();j++)
                res[k++]=t.get(j);
            t.clear();
        }
        return res;
    }
}


时间复杂度:
空间复杂度: