class Solution {
public:
vector<int> findDiagonalOrder(vector<vector<int>>& mat) {
int n = mat.size();
int m = mat[0].size();
std::vector<int> a;
for(int i = 0; i < m+n-1; i++)
{
// 偶数 下往上
if(i % 2 == 0)
{
// 起点 x = min(i, n - 1) y = i - x
// 终点 x = max(0, i-(m - 1)) y = i - x
for(int j = min(i, n - 1); j >= max(0, i-(m - 1)); j--)
{
a.push_back(mat[j][i - j]);
}
}
else
{
// 起点 x = max(0, i-(m - 1)) y = i - x
// 终点 x = min(i, n - 1) y = i - x
for(int j = max(0, i-(m - 1)); j <= min(i, n - 1); j++)
{
a.push_back(mat[j][i - j]);
}
}
}
return a;
}
};